diff options
439 files changed, 51968 insertions, 13112 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df94bd50e5..2d7fbac84c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -327,7 +327,8 @@ Currently we have the following branches in use: | Branch | | | --------- | --------- | -| master | Active development branch for PHP 8.0, which is open for backwards incompatible changes and major internal API changes. | +| master | Active development branch for PHP 8.1, which is open for backwards incompatible changes and major internal API changes. | +| PHP-8.0 | Is used to release the PHP 8.0.x series. This is a current stable version and is open for bugfixes only. | | PHP-7.4 | Is used to release the PHP 7.4.x series. This is a current stable version and is open for bugfixes only. | | PHP-7.3 | Is used to release the PHP 7.3.x series. This is a current stable version and is open for bugfixes only. | | PHP-7.2 | Is used to release the PHP 7.2.x series. This is an old stable version and is open for security fixes only. | @@ -1,386 +1,24 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 8.0.1RC1 +?? ??? ????, PHP 8.1.0alpha1 - Core: - . Fixed bug #80345 (PHPIZE configuration has outdated PHP_RELEASE_VERSION). - (cmb) - . Fixed bug #72964 (White space not unfolded for CC/Bcc headers). (cmb) + . Fixed inclusion order for phpize builds on Windows. (cmb) -- Tidy: - . Fixed bug #77594 (ob_tidyhandler is never reset). (cmb) - -26 Nov 2020, PHP 8.0.0 - -- BZ2: - . Fixed bug #71263 (fread() does not report bzip2.decompress errors). (cmb) - -- CLI: - . Allow debug server binding to an ephemeral port via `-S localhost:0`. (Sara) - -- COM: - . Fixed bug #55847 (DOTNET .NET 4.0 GAC new location). (cmb) - . Fixed bug #62474 (com_event_sink crashes on certain arguments). (cmb) - -- Calendar: - . Fixed bug #80007 (Potential type confusion in unixtojd() parameter parsing). - (Andy Postnikov) - -- Core: - . Fixed bug #36365 (scandir duplicates file name at every 65535th file). - (cmb) - . Fixed bug #49555 (Fatal error "Function must be a string" message should be - renamed). (Nikita) - . Fixed bug #62294 (register_shutdown_function() does not correctly handle - exit code). (Nikita) - . Fixed bug #62609 (Allow implementing Traversable on abstract classes). - (Nikita) - . Fixed bug #65274 (Enhance undefined class constant error with class name). - (Nikita) - . Fixed bug #65275 (Calling exit() in a shutdown function does not change the - exit value in CLI). (Nikita) - . Fixed bug #69084 (Unclear error message when not implementing a renamed - abstract trait function). (Nikita) - . Fixed bug #70839 (Converting optional argument to variadic forbidden by LSP - checks). (Nikita) - . Fixed bug #74558 (Can't rebind closure returned by Closure::fromCallable()). - (cmb) - . Fixed bug #77561 (Shebang line not stripped for non-primary script). - (Nikita) - . Fixed bug #77619 (Wrong reflection on MultipleIterator::__construct). - (Fabien Villepinte) - . Fixed bug #77966 (Cannot alias a method named "namespace"). (Nikita) - . Fixed bug #78236 (convert error on receiving variables when duplicate [). - (cmb) - . Fixed bug #78770 (Incorrect callability check inside internal methods). - (Nikita) - . Fixed bug #79108 (Referencing argument in a function makes it a reference - in the stack trace). (Nikita) - . Fixed bug #79368 ("Unexpected end of file" is not an acceptable error - message). (Alex Dowad) - . Fixed bug #79462 (method_exists and property_exists incoherent behavior). - (cmb) - . Fixed bug #79467 (data:// wrappers are writable). (cmb) - . Fixed bug #79521 (Check __set_state structure). (carusogabriel) - . Fixed bug #79790 ("Illegal offset type" exception during AST evaluation - not handled properly). (Nikita) - . Fixed bug #79791 (Assertion failure when unsetting variable during binary - op). (Nikita) - . Fixed bug #79828 (Segfault when trying to access non-existing variable). - (Nikita) - . Fixed bug #79841 (Syntax error in configure / unescaped "[]" in php.m4). - (Nikita) - . Fixed bug #79852 (count(DOMNodeList) doesn't match - count(IteratorIterator(DOMNodeList))). (Nikita) - . Fixed bug #79867 (Promoted untyped properties should get null default - value). (Nikita) - . Fixed bug #79897 (Promoted constructor params with attribs cause crash). - (Deus Kane) - . Fixed bug #79927 (Generator doesn't throw exception after multiple yield - from iterable). (Nikita) - . Fixed bug #79946 (Build fails due to undeclared UINT32_C). (Nikita) - . Fixed bug #79948 (Exit in auto-prepended file does not abort PHP execution). - (Nikita) - . Fixed bug #80045 (memleak after two set_exception_handler calls with - __call). (Nikita) - . Fixed bug #80096 (Segmentation fault with named arguments in nested call). - (Nikita) - . Fixed bug #80109 (Cannot skip arguments when extended debug is enabled). - (Nikita) - . Fixed bug #80225 (broken namespace usage in eval code). (Nikita) - . Fixed bug #80258 (Windows Deduplication Enabled, randon permission errors). - (cmb) - . Fixed bug #80280 (ADD_EXTENSION_DEP() fails for ext/standard and ext/date). - (cmb) - . Fixed bug #80334 (assert() vs named parameters - confusing error). (Nikita) - . Fixed bug #8055 (Abstract trait methods returning "self" cannot be - fulfilled by traits). (Nikita) - . Fixed faulty generator cleanup with yield from. (Bob) - . Implement #[Attr] Attribute syntax as per final vote in RFC - https://wiki.php.net/rfc/shorter_attribute_syntax_change - . Implemented FR #47074 (phpinfo() reports "On" as 1 for the some - extensions). (cmb) - . Implemented FR #72089 (require() throws fatal error instead of exception). - (Nikita) - . Removed the pdo_odbc.db2_instance_name php.ini directive. (Kalle) - . Use SSE2 instructions do locale independent strtolower. (Laruence) - -- Curl: - . Bumped required libcurl version to 7.29.0. (cmb) - . Fixed bug #80121 (Null pointer deref if CurlHandle directly instantiated). - (Nikita) - -- DOM: - . Add property DOMXPath::$registerNodeNamespaces and constructor argument - that allow global flag to configure query() or evaluate() calls. - . Fixed bug #79968 (DOMChildNode API crash on unattached nodes). (Benjamin) - . Fixed bug #80268 (loadHTML() truncates at NUL bytes). (cmb) - -- Date: - . Fixed bug #60302 (DateTime::createFromFormat should new static(), not new - self()). (Derick) - . Fixed bug #65547 (Default value for sunrise/sunset zenith still wrong). - (cmb) - . Fixed bug #69044 (discrepancy between time and microtime). (krakjoe) - . Fixed bug #80057 (DateTimeImmutable::createFromFormat() does not populate - time). (Derick) - . Implemented FR #79903 (datetime: new format "p", same as "P" but returning - "Z" for UTC). (gharlan) - -- Enchant: - . Add LIBENCHANT_VERSION macro. - . Add enchant_dict_add and enchant_dict_is_added functions. - . Deprecate enchant_broker_set_dict_path, enchant_broker_get_dict_path, - enchant_dict_add_to_personal and enchant_dict_is_in_session. - . Use libenchant-2 when available. - -- FFI: - . Added FFI\CType::getName() method. (chopins) - . Fixed bug #79177 (FFI doesn't handle well PHP exceptions within callback). - (cmb, Dmitry, Nikita) - . Fixed bug #79749 (Converting FFI instances to bool fails). (cmb) - -- FPM: - . Add pm.status_listen option. (Jakub Zelenka) - -- Fileinfo: - . Upgrade to libmagic 5.39. (Anatol) +- FTP: + . Convert resource<ftp> to object \FTPConnection. (Sara) - GD: - . Added imagegetinterpolation(). (cmb) - . Fixed bug #55005 (imagepolygon num_points requirement). (cmb) - . Made the $num_points parameter of php_imagepolygon optional. (cmb) - . Removed deprecated image2wbmp(). (cmb) - . Removed deprecated png2wbmp() and jpeg2wbmp(). (cmb) - . Replaced gd resources with objects. (Mark Randall) - -- IMAP: - . Fixed bug #64076 (imap_sort() does not return FALSE on failure). (cmb) - . Fixed bug #76618 (segfault on imap_reopen). (girgias) - . Fixed bug #80213 (imap_mail_compose() segfaults on certain $bodies). (cmb) - . Fixed bug #80215 (imap_mail_compose() may modify by-val parameters). (cmb) - . Fixed bug #80216 (imap_mail_compose() does not validate types/encodings). - (cmb) - . Fixed bug #80220 (imap_mail_compose() may leak memory). (cmb) - . Fixed bug #80223 (imap_mail_compose() leaks envelope on malformed bodies). - (cmb) - . Fixed bug #80226 (imap_sort() leaks sortpgm memory). (cmb) - . Fixed bug #80239 (imap_rfc822_write_address() leaks memory). (cmb) - . Fixed bug #80242 (imap_mail_compose() segfaults for multipart with rfc822). - (cmb) - . Fixed minor regression caused by fixing bug #80220. (cmb) - -- Iconv: - . Dropped support for iconv without proper errno setting. (cmb) - -- Intl: - . Removed deprecated INTL_IDNA_VARIANT_2003. (cmb) - -- JIT: - . Fixed bug #77857 (Wrong result if executed with JIT). (Laruence) - . Fixed bug #79255 (PHP cannot be compiled with enable JIT). - (Laruence, Dmitry) - . Fixed bug #79582 (Crash seen when opcache.jit=1235 and - opcache.jit_debug=2). (Laruence) - . Fixed bug #79743 (Fatal error when assigning to array property - with JIT enabled). (Laruence) - . Fixed bug #79864 (JIT segfault in Symfony OptionsResolver). (Dmitry) - . Fixed bug #79888 (Incorrect execution with JIT enabled). (Dmitry) - -- JSON: - . The JSON extension is now an integral part of PHP and cannot be disabled - as per RFC: https://wiki.php.net/rfc/always_enable_json (tandre) - -- LDAP: - . Fixed memory leaks. (ptomulik) - . Removed deprecated ldap_sort. (mcmic) - -- MBString: - . Fixed bug #76999 (mb_regex_set_options() return current options). (cmb) - . Removed the unused $is_hex parameter from mb_decode_numericentity(). (cmb) - -- MySQLi: - . Fixed bug #76809 (SSL settings aren't respected when persistent connections - are used). (fabiomsouto) - -- Mysqlnd: - . Fixed #60594 (mysqlnd exposes 160 lines of stats in phpinfo). (PeeHaa) + . Convert resource<gd font> to object \GdFont. (Sara) -- OCI8: - . Deprecated old OCI8 function aliases. (Jens de Nies) - . Modernized oci_register_taf_callback() callable argument parsing - implementation. (girgias) - . Removed obsolete no-op function oci_internal_debug(). (Jens de Nies) - -- ODBC: - . Fixed bug #22986 (odbc_connect() may reuse persistent connection). (cmb) - . Fixed bug #44618 (Fetching may rely on uninitialized data). (cmb) - -- Opcache: - . Fixed bug #76535 (Opcache does not replay compile-time warnings). (Nikita) - . Fixed bug #78654 (Incorrectly computed opcache checksum on files with - non-ascii characters). (mhagstrand) - . Fixed bug #79665 (ini_get() and opcache_get_configuration() inconsistency). - (cmb) - . Fixed bug #80030 (Optimizer segfault with isset on static property with - undef dynamic class name). (Nikita) - . Fixed bug #80175 (PHP8 RC1 - JIT Buffer not working). (cmb) - . Fixed bug #80184 (Complex expression in while / if statements resolves to - false incorrectly). (Nikita) - . Fixed bug #80255 (Opcache bug (bad condition result) in 8.0.0rc1). (Nikita) - . Fixed run-time binding of preloaded dynamically declared function. (Dmitry) +- hash: + . Implemented FR #68109 (Add MurmurHash V3). (Anatol, Michael) - OpenSSL: - . Added Cryptographic Message Syntax (CMS) support. (Eliot Lear) - -- PCRE: - . Don't ignore invalid escape sequences. (sjon) - . Updated to PCRE2 10.35. (cmb) - -- PDO: - . Changed default PDO error mode to exceptions. (AllenJB) - . Fixed bug #77849 (Disable cloning of PDO handle/connection objects). - (camporter) - -- PDO_Firebird: - . Fixed bug #64937 (Firebird PDO preprocessing sql). (Simonov Denis) - -- PDO_OCI: - . Added support for setting and getting the oracle OCI 18c call timeout. - (camporter) - -- PDO_PGSQL: - . Bumped required libpq version to 9.1. (cmb) - -- PGSQL: - . Bumped required libpq version to 9.1. (cmb) - -- Phpdbg: - . Fixed bug #76596 (phpdbg support for display_errors=stderr). (kabel) - . Fixed bug #76801 (too many open files). (alekitto) - . Fixed bug #77800 (phpdbg segfaults on listing some conditional breakpoints). - (krakjoe) - . Fixed bug #77805 (phpdbg build fails when readline is shared). (krakjoe) - -- Reflection: - . Fixed bug #64592 (ReflectionClass::getMethods() returns methods out of - scope). (Nikita) - . Fixed bug #69180 (Reflection does not honor trait conflict resolution / - method aliasing). (Nikita) - . Fixed bug #74939 (Nested traits' aliased methods are lowercased). (Nikita) - . Fixed bug #77325 (ReflectionClassConstant::$class returns wrong class when - extending). (Nikita) - . Fixed bug #78697 (ReflectionClass::implementsInterface - inaccurate error - message with traits). (villfa) - . Fixed bug #80190 (ReflectionMethod::getReturnType() does not handle static - as part of union type). (Nikita) - . Fixed bug #80299 (ReflectionFunction->invokeArgs confused in arguments). - (Nikita) - . Fixed bug #80370 (getAttributes segfault on dynamic properties). (Benjamin - Eberlei) - . Implement #79628 (Add $filter parameter for ReflectionClass::getConstants - and ReflectionClass::getReflectionConstants) (carusogabriel) - . Implement ReflectionProperty::hasDefaultValue and - Reflection::getDefaultValue (beberlei) - -- SNMP: - . Fixed bug #70461 (disable md5 code when it is not supported in net-snmp). - (Alexander Bergmann, cmb) - -- SPL: - . Fixed bug #65006 (spl_autoload_register fails with multiple callables using - self, same method). (Nikita) - . Fixed bug #65387 (Circular references in SPL iterators are not garbage - collected). (Nikita) - . Fixed bug #71236 (Second call of spl_autoload_register() does nothing if it - has no arguments). (Nikita) - . Fixed bug #79987 (Memory leak in SplFileInfo because of missing - zend_restore_error_handling()). (Dmitry) - . SplFixedArray is now IteratorAggregate rather than Iterator. (alexdowad) - -- SQLite3: - . Added SQLite3::setAuthorizer() and respective class constants. (bohwaz) - -- Session: - . Fixed bug #73529 (session_decode() silently fails on wrong input). (cmb) - . Fixed bug #78624 (session_gc return value for user defined session - handlers). (bshaffer) - -- Shmop: - . Converted shmop resources to objects. (cmb) - -- SimpleXML: - . Fixed bug #63575 (Root elements are not properly cloned). (cmb) - . Fixed bug #75245 (Don't set content of elements with only whitespaces). - (eriklundin) - -- Sodium: - . Fixed bug #77646 (sign_detached() strings not terminated). (Frank) - -- Standard: - . Don't force rebuild of symbol table, when populating $http_response_header - variable by the HTTP stream wrapper. (Dmitry) - . Fixed bug #47983 (mixed LF and CRLF line endings in mail()). (cmb) - . Fixed bug #64060 (lstat_stat_variation7.phpt fails on certain file systems). - (M. Voelker, cmb) - . Fixed bug #75902 (str_replace should warn when misused with nested arrays). - (Nikita) - . Fixed bug #76859 (stream_get_line skips data if used with data-generating - filter). (kkopachev) - . Fixed bug #77204 (getimagesize(): Read error! should mention file path). - (peter279k) - . Fixed bug #78385 (parse_url() does not include 'query' when question mark - is the last char). (Islam Israfilov) - . Fixed bug #79868 (Sorting with array_unique gives unwanted result). (Nikita) - . Fixed bug #80256 (file_get_contents strip first line with chunked encoding - redirect). (Nikita) - . Fixed bug #80266 (parse_url silently drops port number 0). (cmb, Nikita) - . Fixed bug #80290 (Double free when ASSERT_CALLBACK is used with a dynamic - message). (Nikita) - . Implemented FR #78638 (__PHP_Incomplete_Class should be final). (Laruence) - . Made quoting of cmd execution functions consistent. (cmb) - -- Tidy: - . Removed the unused $use_include_path parameter from tidy_repair_string(). - (cmb) - -- Tokenizer: - . Fixed bug #80328 (PhpToken::getAll() confusing name). (Nikita) - -- XML: - . Fixed bug #76874 (xml_parser_free() should never leak memory). (Nikita) - -- XMLWriter: - . Changed functions to accept/return XMLWriter objects instead of resources. - (cmb) - . Implemented FR #79344 (xmlwriter_write_attribute_ns: $prefix should be - nullable). (cmb) - . Removed return types from XMLWriter stubs. (cmb) - -- Zip: - . Add "flags" options to ZipArchive::addGlob and addPattern methods - keeping previous behavior having FL_OVERWRITE by default. (Remi) - . Add ZipArchive::EM_UNKNOWN and ZipArchive::EM_TRAD_PKWARE constants. (Remi) - . Add ZipArchive::isCompressionMethodSupported() and - ZipArchive::isEncryptionMethodSupported() method (libzip 1.7.0). (Remi) - . Add ZipArchive::replaceFile() method. (Remi) - . Add ZipArchive::setCancelCallback method (since libzip 1.6.0). (Remi) - . Add ZipArchive::setMtimeName and ZipArchive::setMtimeIndex methods. (Remi) - . Add ZipArchive::setProgressCallback method (since libzip 1.3.0). (Remi) - . Add lastId property to ZipArchive. (Remi) - . Add optional "flags" parameter to ZipArchive::addEmptyDir, addFile and - addFromString methods. (Remi) - . Fixed bug #50678 (files extracted by ZipArchive class lost their - original modified time). (Remi) - . Fixed bug #72374 (remove_path strips first char of filename). (tyage, Remi) - . Implemented FR #77960 (add compression / encryption options for - ZipArchive::addGlob and ZipArchive::addPattern). (Remi) - . ZipArchive::status and ZipArchive::statusSys properties and - ZipArchive::getStatusString() method stay valid after the archive - is closed. (Remi) + . Bump minimal OpenSSL version to 1.0.2. (Jakub Zelenka) -- Zlib: - . Fixed bug #71417 (fread() does not report zlib.inflate errors). (cmb) - . Fixed bug #78792 (zlib.output_compression disabled by Content-Type: image/). - (cmb) +- PSpell: + . Convert resource<pspell> to object \PSpell. (Sara) + . Convert resource<pspell config> to object \PSPellConfig. (Sara) +<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>> @@ -1,4 +1,4 @@ -PHP 8.0 UPGRADE NOTES +PHP 8.1 UPGRADE NOTES 1. Backward Incompatible Changes 2. New Features @@ -15,1137 +15,70 @@ PHP 8.0 UPGRADE NOTES 13. Other Changes 14. Performance Improvements - ======================================== 1. Backward Incompatible Changes ======================================== -- Core: - . `match` is now a reserved keyword. - . Assertion failures now throw by default. If the old behavior is desired, - then set `assert.exception=0` in INI settings. - . Methods with the same name as the class are no longer interpreted as - constructors. The __construct() method should be used instead. - . Removed ability to call non-static methods statically. - Thus `is_callable` will fail when checking for a non-static method with a - classname (must check with an object instance). - . Removed (real) cast. - . Removed (unset) cast. - . Removed track_errors ini directive. This means that $php_errormsg is no - longer available. The error_get_last() function may be used instead. - . Removed the ability to define case-insensitive constants. The third - argument to define() may no longer be true. - . Access to undefined constants now always results in an Error exception. - Previously, unqualified constant accesses resulted in a warning and were - interpreted as strings. - . Removed ability to specify an autoloader using an __autoload() function. - spl_autoload_register() should be used instead. - . Removed the $errcontext argument for custom error handlers. - . Removed create_function(). Anonymous functions may be used instead. - . Removed each(). foreach or ArrayIterator should be used instead. - . Removed ability to unbind $this from closures that were created from a - method, using Closure::fromCallable() or ReflectionMethod::getClosure(). - . Also removed ability to unbind $this from proper closures that contain uses - of $this. - . Removed ability to use array_key_exists() with objects. Use one of isset() - or property_exists() instead. - . Made the behavior of array_key_exists() regarding the type of the key - parameter consistent with isset() and normal array access. All key types now - use the usual coercions and array/object keys throw a TypeError. - . Any array that has a number n as its first numeric key will use n+1 for - its next implicit key, even if n is negative. - RFC: https://wiki.php.net/rfc/negative_array_index - . The default error_reporting level is now E_ALL. Previously it excluded - E_NOTICE and E_DEPRECATED. - . display_startup_errors is now enabled by default. - . Using "parent" inside a class that has no parent will now result in a - fatal compile-time error. - . The @ operator will no longer silence fatal errors (E_ERROR, E_CORE_ERROR, - E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR, E_PARSE). Error handlers - that expect error_reporting to be 0 when @ is used, should be adjusted to - use a mask check instead: - - // Replace - function my_error_handler($err_no, $err_msg, $filename, $linenum) { - if (error_reporting() == 0) { - return; // Silenced - } - // ... - } - - // With - function my_error_handler($err_no, $err_msg, $filename, $linenum) { - if (!(error_reporting() & $err_no)) { - return; // Silenced - } - // ... - } - - Additionally, care should be taken that error messages are not displayed in - production environments, which can result in information leaks. Please - ensure that display_errors=Off is used in conjunction with error logging. - . Following the hash comment operator # immediately with an opening bracket - is not supported as a comment anymore since this syntax is now used for - attributes. - RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change - . Inheritance errors due to incompatible method signatures (LSP violations) - will now always generate a fatal error. Previously a warning was generated - in some cases. - RFC: https://wiki.php.net/rfc/lsp_errors - . The precedence of the concatenation operator has changed relative to - bitshifts and addition as well as subtraction. - RFC: https://wiki.php.net/rfc/concatenation_precedence - . Arguments with a default value that resolves to null at runtime will no - longer implicitly mark the argument type as nullable. Either use an explicit - nullable type, or an explicit null default value instead. - - // Replace - function test(int $arg = CONST_RESOLVING_TO_NULL) {} - // With - function test(?int $arg = CONST_RESOLVING_TO_NULL) {} - // Or - function test(int $arg = null) {} - . A number of warnings have been converted into Error exceptions: - - * Attempting to write to a property of a non-object. Previously this - implicitly created an stdClass object for null, false and empty strings. - * Attempting to append an element to an array for which the PHP_INT_MAX key - is already used. - * Attempting to use an invalid type (array or object) as an array key or - string offset. - * Attempting to write to an array index of a scalar value. - * Attempting to unpack a non-array/Traversable. - - A number of notices have been converted into warnings: - - * Attempting to read an undefined variable. - * Attempting to read an undefined property. - * Attempting to read an undefined array key. - * Attempting to read a property of a non-object. - * Attempting to access an array index of a non-array. - * Attempting to convert an array to string. - * Attempting to use a resource as an array key. - * Attempting to use null, a boolean, or a float as a string offset. - * Attempting to read an out-of-bounds string offset. - * Attempting to assign an empty string to a string offset. - - RFC: https://wiki.php.net/rfc/engine_warnings - . Attempting to assign multiple bytes to a string offset will now emit a - warning. - . Unexpected characters in source files (such as null bytes outside of - strings) will now result in a ParseError exception instead of a compile - warning. - . Uncaught exceptions now go through "clean shutdown", which means that - destructors will be called after an uncaught exception. - . Compile time fatal error "Only variables can be passed by reference" has - been delayed until runtime and converted to "Argument cannot be passed by - reference" exception. - . Some "Only variables should be passed by reference" notices have been - converted to "Argument cannot be passed by reference" exception. - . The generated name for anonymous classes has changed. It will now include - the name of the first parent or interface: - - new class extends ParentClass {}; - // -> ParentClass@anonymous - new class implements FirstInterface, SecondInterface {}; - // -> FirstInterface@anonymous - new class {}; - // -> class@anonymous - - The name shown above is still followed by a null byte and a unique - suffix. - . Non-absolute trait method references in trait alias adaptations are now - required to be unambiguous: - - class X { - use T1, T2 { - func as otherFunc; - } - function func() {} - } - - If both T1::func() and T2::func() exist, this code was previously silently - accepted, and func was assumed to refer to T1::func. Now it will generate a - fatal error instead, and either T1::func or T2::func needs to be written - explicitly. - . The signature of abstract methods defined in traits is now checked against - the implementing class method: - - trait MyTrait { - abstract private function neededByTrait(): string; - } - - class MyClass { - use MyTrait; - - // Error, because of return type mismatch. - private function neededByTrait(): int { return 42; } - } - - RFC: https://wiki.php.net/rfc/abstract_trait_method_validation - . Disabled functions are now treated exactly like non-existent functions. - Calling a disabled function will report it as unknown, and redefining a - disabled function is now possible. - . data: stream wrappers are no longer writable, which matches the documented - behavior. - . The arithmetic and bitwise operators - +, -, *, /, **, %, <<, >>, &, |, ^, ~, ++, -- - will now consistently throw a TypeError when one of the operands is an - array, resource or non-overloaded object. The only exception to this is the - array + array merge operation, which remains supported. - RFC: https://wiki.php.net/rfc/arithmetic_operator_type_checks - . Float to string casting will now always behave locale-independently. - RFC: https://wiki.php.net/rfc/locale_independent_float_to_string - . Removed support for deprecated curly braces for offset access - RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access - . Applying the final modifier on a private method will now produce a warning - unless that method is the constructor. - RFC: https://wiki.php.net/rfc/inheritance_private_methods - . If an object constructor exit()s, the object destructor will no longer be - called. This matches the behavior when the constructor throws. - . Non-strict comparisons between numbers and non-numeric strings now work by - casting the number to string and comparing the strings. Comparisons between - numbers and numeric strings continue to work as before. Notably, this means - that `0 == "not-a-number"` is considered false now. - RFC: https://wiki.php.net/rfc/string_to_number_comparison - . Namespaced names can no longer contain whitespace: While `Foo\Bar` will be - recognized as a namespaced name, `Foo \ Bar` will not. Conversely, reserved - keywords are now permitted as namespace segments, which may also change the - interpretation of code: `new\x` is now the same as `constant('new\x')`, not - `new \x()`. - RFC: https://wiki.php.net/rfc/namespaced_names_as_token - . Nested ternaries now require explicit parentheses. - RFC: https://wiki.php.net/rfc/ternary_associativity - . debug_backtrace() and Exception::getTrace() will no longer provide - references to arguments. It will not be possible to change function - arguments through the backtrace. - . Numeric string handling has been altered to be more intuitive and less - error-prone. Trailing whitespace is now allowed in numeric strings for - consistency with how leading whitespace is treated. This mostly affects: - - The is_numeric() function - - String-to-string comparisons - - Type declarations - - Increment and decrement operations - The concept of a "leading-numeric string" has been mostly dropped; the - cases where this remains exist in order to ease migration. Strings which - emitted an E_NOTICE "A non well-formed numeric value encountered" will now - emit an E_WARNING "A non-numeric value encountered" and all strings which - emitted an E_WARNING "A non-numeric value encountered" will now throw a - TypeError. This mostly affects: - - Arithmetic operations - - Bitwise operations - This E_WARNING to TypeError change also affects the E_WARNING - "Illegal string offset 'string'" for illegal string offsets. The behavior - of explicit casts to int/float from strings has not been changed. - RFC: https://wiki.php.net/rfc/saner-numeric-strings - . Magic Methods will now have their arguments and return types checked if - they have them declared. The signatures should match the following list: - - __call(string $name, array $arguments): mixed - __callStatic(string $name, array $arguments): mixed - __clone(): void - __debugInfo(): ?array - __get(string $name): mixed - __invoke(mixed $arguments): mixed - __isset(string $name): bool - __serialize(): array - __set(string $name, mixed $value): void - __set_state(array $properties): object - __sleep(): array - __unserialize(array $data): void - __unset(string $name): void - __wakeup(): void - - RFC: https://wiki.php.net/rfc/magic-methods-signature - . call_user_func_array() array keys will now be interpreted as parameter names, - instead of being silently ignored. - -- COM: - . Removed the ability to import case-insensitive constants from type - libraries. The second argument to com_load_typelib() may no longer be false; - com.autoregister_casesensitive may no longer be disabled; case-insensitive - markers in com.typelib_file are ignored. - -- Curl: - . CURLOPT_POSTFIELDS no longer accepts objects as arrays. To interpret an - object as an array, perform an explicit (array) cast. The same applies to - other options accepting arrays as well. - -- Date: - . mktime() and gmmktime() now require at least one argument. time() can be - used to get the current timestamp. - -- dom: - . Remove unimplemented classes from ext/dom that had no behavior and contained - test data. These classes have also been removed in the latest version of DOM - standard: - - * DOMNameList - * DomImplementationList - * DOMConfiguration - * DomError - * DomErrorHandler - * DOMImplementationSource - * DOMLocator - * DOMUserDataHandler - * DOMTypeInfo - -- Enchant: - . enchant_broker_list_dicts(), enchant_broker_describe() and - enchant_dict_suggest() will now return an empty array instead of null. - . enchant_broker_init() will now return an EnchantBroker object rather than - a resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . enchant_broker_request_dict() and enchant_broker_request_pwl_dict() will now - return an EnchantDictionary object rather than a resource. Return value - checks using is_resource() should be replaced with checks for `false`. - -- Exif: - . Removed read_exif_data(). exif_read_data() should be used instead. - -- Filter: - . The FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIRED flags for the - FILTER_VALIDATE_URL filter have been removed. The scheme and host are (and - have been) always required. - . The INPUT_REQUEST and INPUT_SESSION source for filter_input() etc have been - removed. These were never implemented and their use always generated a - warning. - -- GD: - . The GD extension now uses a GdImage objects as the underlying data structure - for images, rather than resources. These objects are completely opaque, i.e. - they don't have any methods. Return value checks using is_resource() should - be replaced with checks for `false`. The imagedestroy() function no longer - has an effect, instead the GdImage instance is automatically destroyed if - it is no longer referenced. - . The deprecated function image2wbmp() has been removed. - RFC: https://wiki.php.net/rfc/image2wbmp - . The deprecated functions png2wbmp() and jpeg2wbmp() have been removed. - RFC: https://wiki.php.net/rfc/deprecate-png-jpeg-2wbmp - . The default $mode parameter of imagecropauto() no longer accepts -1. - IMG_CROP_DEFAULT should be used instead. - -- GMP: - . gmp_random() has been removed. One of gmp_random_range() or - gmp_random_bits() should be used instead. - -- Iconv: - . iconv() implementations which do not properly set errno in case of errors - are no longer supported. - -- IMAP: - . The unused default_host argument of imap_headerinfo() has been removed. - . The imap_header() function which is an alias of imap_headerinfo() has been removed. - -- Intl: - . The deprecated constant INTL_IDNA_VARIANT_2003 has been removed. - RFC: https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003 - . The deprecated Normalizer::NONE constant has been removed. - . The IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::RELATIVE_LONG, - IntlDateFormatter::RELATIVE_MEDIUM, and IntlDateFormatter::RELATIVE_SHORT - constants have been added. - -- LDAP: - . The deprecated function ldap_sort has been removed. - . The deprecated function ldap_control_paged_result has been removed. - . The deprecated function ldap_control_paged_result_response has been removed. - . The interface of ldap_set_rebind_proc has changed; the $callback parameter - does not accept empty string anymore; null value shall be used instead. - -- Mbstring: - . The mbstring.func_overload directive has been removed. The related - MB_OVERLOAD_MAIL, MB_OVERLOAD_STRING, and MB_OVERLOAD_REGEX constants have - also been removed. Finally, the "func_overload" and "func_overload_list" - entries in mb_get_info() have been removed. - . mb_parse_str() can no longer be used without specifying a result array. - . A number of deprecated mbregex aliases have been removed. See the following - list for which functions should be used instead: - - * mbregex_encoding() -> mb_regex_encoding() - * mbereg() -> mb_ereg() - * mberegi() -> mb_eregi() - * mbereg_replace() -> mb_ereg_replace() - * mberegi_replace() -> mb_eregi_replace() - * mbsplit() -> mb_split() - * mbereg_match() -> mb_ereg_match() - * mbereg_search() -> mb_ereg_search() - * mbereg_search_pos() -> mb_ereg_search_pos() - * mbereg_search_regs() -> mb_ereg_search_regs() - * mbereg_search_init() -> mb_ereg_search_init() - * mbereg_search_getregs() -> mb_ereg_search_getregs() - * mbereg_search_getpos() -> mb_ereg_search_getpos() - * mbereg_search_setpos() -> mb_ereg_search_setpos() - - . The 'e' modifier for mb_ereg_replace() has been removed. - mb_ereg_replace_callback() should be used instead. - . A non-string pattern argument to mb_ereg_replace() will now be interpreted - as a string instead of an ASCII codepoint. The previous behavior may be - restored with an explicit call to chr(). - . The needle argument for mb_strpos(), mb_strrpos(), mb_stripos(), - mb_strripos(), mb_strstr(), mb_stristr(), mb_strrchr() and mb_strrichr() can - now be empty. - . The $is_hex parameter, which was not used internally, has been removed from - mb_decode_numericentity(). - . The legacy behavior of passing the encoding as the third argument instead - of an offset for the mb_strrpos() function has been removed; provide an - explicit 0 offset with the encoding as the fourth argument instead. - . The ISO_8859-* character encoding aliases have been replaced by ISO8859-* - aliases for better interoperability with the iconv extension. The mbregex - ISO 8859 aliases with underscores (ISO_8859_* and ISO8859_*) have also been - removed. - . mb_ereg() and mb_eregi() will now return boolean true on a successful - match. Previously they returned integer 1 if $matches was not passed, or - max(1, strlen($reg[0])) is $matches was passed. - -- OCI8: - . The OCI-Lob class is now called OCILob, and the OCI-Collection class is now - called OCICollection for name compliance enforced by PHP 8 arginfo - type annotation tooling. - . Several alias functions have been marked as deprecated. - . oci_internal_debug() and its alias ociinternaldebug() have been removed. - -- ODBC: - . odbc_connect() no longer reuses persistent connections. - . The unused flags parameter of odbc_exec() has been removed. - -- OpenSSL: - . openssl_x509_read() and openssl_csr_sign() will now return an - OpenSSLCertificate object rather than a resource. Return value checks using - is_resource() should be replaced with checks for `false`. - . The openssl_x509_free() function is deprecated and no longer has an effect, - instead the OpenSSLCertificate instance is automatically destroyed if it is no - longer referenced. - . openssl_csr_new() will now return an OpenSSLCertificateSigningRequest object - rather than a resource. Return value checks using is_resource() should be - replaced with checks for `false`. - . openssl_pkey_new() will now return an OpenSSLAsymmetricKey object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . The openssl_pkey_free() function is deprecated and no longer has an effect, - instead the OpenSSLAsymmetricKey instance is automatically destroyed if it is no - longer referenced. - . openssl_seal() and openssl_open() now require $method to be passed, as the - previous default of "RC4" is considered insecure. - -- PCRE: - . When passing invalid escape sequences they are no longer interpreted as - literals. This behavior previously required the X modifier - which is - now ignored. - -- PDO: - . The default error handling mode has been changed from "silent" to - "exceptions". See https://www.php.net/manual/en/pdo.error-handling.php - for details of behavior changes and how to explicitly set this attribute. - RFC: https://wiki.php.net/rfc/pdo_default_errmode - . The signatures of some PDO methods have changed: - - PDO::query( - string $statement, ?int $fetch_mode = null, ...$fetch_mode_args) - PDOStatement::setFetchMode(int $mode, ...$params) - -- PDO_ODBC: - . The php.ini directive pdo_odbc.db2_instance_name has been removed - -- pgsql: - . The deprecated pg_connect() syntax using multiple parameters instead of a - connection string is no longer supported. - . The deprecated pg_lo_import() and pg_lo_export() signature that passes the - connection as the last argument is no longer supported. The connection - should be passed as first argument instead. - . pg_fetch_all() will now return an empty array instead of false for result - sets with zero rows. - -- Phar: - . Metadata associated with a phar will no longer be automatically unserialized, - to fix potential security vulnerabilities due to object instantiation, autoloading, etc. - RFC: https://wiki.php.net/rfc/phar_stop_autoloading_metadata - -- Reflection: - . The method signatures - - ReflectionClass::newInstance($args) - ReflectionFunction::invoke($args) - ReflectionMethod::invoke($object, $args) - - have been changed to: - - ReflectionClass::newInstance(...$args) - ReflectionFunction::invoke(...$args) - ReflectionMethod::invoke($object, ...$args) - - Code that must be compatible with both PHP 7 and PHP 8 can use the following - signatures to be compatible with both versions: - - ReflectionClass::newInstance($arg = null, ...$args) - ReflectionFunction::invoke($arg = null, ...$args) - ReflectionMethod::invoke($object, $arg = null, ...$args) - - . The ReflectionType::__toString() method will now return a complete debug - representation of the type, and is no longer deprecated. In particular the - result will include a nullability indicator for nullable types. The format - of the return value is not stable and may change between PHP versions. - . Reflection export() methods have been removed. - . The following methods can now return information about default values of - parameters of internal functions: - ReflectionParameter::isDefaultValueAvailable() - ReflectionParameter::getDefaultValue() - ReflectionParameter::isDefaultValueConstant() - ReflectionParameter::getDefaultValueConstantName() - . ReflectionMethod::isConstructor() and ReflectionMethod::isDestructor() now - also return true for `__construct` and `__destruct` methods of interfaces. - Previously, this would only be true for methods of classes and traits. - . ReflectionType::isBuiltin() method has been moved to ReflectionNamedType. - ReflectionUnionType does not have it. - -- Sockets: - . The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES - flags for socket_addrinfo_lookup() have been removed. - . socket_create(), socket_create_listen(), socket_accept(), - socket_import_stream(), socket_addrinfo_connect(), socket_addrinfo_bind(), - and socket_wsaprotocol_info_import() will now return a Socket object rather - than a resource. Return value checks using is_resource() should be replaced - with checks for `false`. - . socket_addrinfo_lookup() will now return an array of AddressInfo objects - rather than resources. - -- SPL: - . SplFileObject::fgetss() has been removed. - . SplHeap::compare($a, $b) now specifies a method signature. Inheriting - classes implementing this method will now have to use a compatible - method signature. - . SplDoublyLinkedList::push() now returns void instead of true - . SplDoublyLinkedList::unshift() now returns void instead of true - . SplQueue::enqueue() now returns void instead of true - . spl_autoload_register() will now always throw a TypeError on invalid - arguments, therefore the second argument $do_throw is ignored and a - notice will be emitted if it is set to false. - . SplFixedArray is now an IteratorAggregate and not an Iterator. - SplFixedArray::rewind(), ::current(), ::key(), ::next(), and ::valid() - have been removed. In their place, SplFixedArray::getIterator() has been - added. Any code which uses explicit iteration over SplFixedArray must now - obtain an Iterator through SplFixedArray::getIterator(). This means that - SplFixedArray is now safe to use in nested loops. - -- Standard: - . assert() will no longer evaluate string arguments, instead they will be - treated like any other argument. assert($a == $b) should be used instead of - assert('$a == $b'). The assert.quiet_eval ini directive and - ASSERT_QUIET_EVAL constants have also been removed, as they would no longer - have any effect. - . parse_str() can no longer be used without specifying a result array. - . fgetss() has been removed. - . The string.strip_tags filter has been removed. - . The needle argument of strpos(), strrpos(), stripos(), strripos(), strstr(), - strchr(), strrchr(), and stristr() will now always be interpreted as a - string. Previously non-string needles were interpreted as an ASCII code - point. An explicit call to chr() can be used to restore the previous - behavior. - . The needle argument for strpos(), strrpos(), stripos(), strripos(), - strstr(), stristr() and strrchr() can now be empty. - . The length argument for substr(), substr_count(), substr_compare(), and - iconv_substr() can now be null. Null values will behave as if no length - argument was provided and will therefore return the remainder of the string - instead of an empty string. - . The length argument for array_splice() can now be null. Null values will - behave identically to omitting the argument, thus removing everything from - the 'offset' to the end of the array. - . The args argument of vsprintf(), vfprintf(), and vprintf() must now be an - array. Previously any type was accepted. - . The 'salt' option of password_hash() is no longer supported. If the 'salt' - option is used a warning is generated, the provided salt is ignored, and a - generated salt is used instead. - . The quotemeta() function will now return an empty string if an empty string - was passed. Previously false was returned. - . hebrevc() has been removed. - . convert_cyr_string() has been removed. - . money_format() has been removed. - . ezmlm_hash() has been removed. - . restore_include_path() has been removed. - . get_magic_quotes_gpc() and get_magic_quotes_runtime() has been removed. - . FILTER_SANITIZE_MAGIC_QUOTES has been removed. - . Calling implode() with parameters in a reverse order ($pieces, $glue) is no - longer supported. - . parse_url() will now distinguish absent and empty queries and fragments: - - http://example.com/foo => query = null, fragment = null - http://example.com/foo? => query = "", fragment = null - http://example.com/foo# => query = null, fragment = "" - http://example.com/foo?# => query = "", fragment = "" - - Previously all cases resulted in query and fragment being null. - . var_dump() and debug_zval_dump() will now print floating-point numbers - using serialize_precision rather than precision. In a default configuration, - this means that floating-point numbers are now printed with full accuracy - by these debugging functions. - . If the array returned by __sleep() contains non-existing properties, these - are now silently ignored. Previously, such properties would have been - serialized as if they had the value NULL. - . The default locale on startup is now always "C". No locales are inherited - from the environment by default. Previously, LC_ALL was set to "C", while - LC_CTYPE was inherited from the environment. However, some functions did not - respect the inherited locale without an explicit setlocale() call. An - explicit setlocale() call is now always required if you wish to change any - locale component from the default. - . Removed deprecated DES fallback in crypt(). If an unknown salt format is - passed to crypt(), the function will fail with *0 instead of falling back - to a weak DES hash now. - . Specifying out of range rounds for sha256/sha512 crypt() will now fail with - *0 instead of clamping to the closest limit. This matches glibc behavior. - . The result of sorting functions may have changed, if the array contains - elements that compare as equal. - . Sort comparison functions that return true or false will now throw a - deprecation warning, and should be replaced with an implementation - that returns an integer less than, equal to, or greater than zero. - - // Replace - usort($array, fn($a, $b) => $a > $b); - // With - usort($array, fn($a, $b) => $a <=> $b); - - . Any functions accepting callbacks that are not explicitly specified to - accept parameters by reference will now warn if a callback with reference - parameters is used. Examples include array_filter() and array_reduce(). - This was already the case for most, but not all, functions previously. - . The HTTP stream wrapper as used by functions like file_get_contents() - now advertises HTTP/1.1 rather than HTTP/1.0 by default. This does not - change the behavior of the client, but may cause servers to respond - differently. To retain the old behavior, set the 'protocol_version' - stream context option, e.g. - - $ctx = stream_context_create(['http' => ['protocol_version' => '1.0']]); - echo file_get_contents('http://example.org', false, $ctx); - . Calling crypt() without an explicit salt is no longer supported. If you - would like to produce a strong hash with an auto-generated salt, use - password_hash() instead. - . substr(), mb_substr(), iconv_substr() and grapheme_substr() now consistently - clamp out-of-bounds offsets to the string boundary. Previously, false was - returned instead of the empty string in some cases. - . Populating $http_response_header variable by the HTTP stream wrapper - doesn't force rebuilding of symbol table anymore. - -- Sysvmsg: - . msg_get_queue() will now return an SysvMessageQueue object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - -- Sysvsem: - . sem_get() will now return an SysvSemaphore object rather than a resource. - Return value checks using is_resource() should be replaced with checks - for `false`. - . The $auto_release parameter of sem_get() was changed to accept bool values - rather than int. - -- Sysvshm: - . shm_attach() will now return an SysvSharedMemory object rather than a resource. - Return value checks using is_resource() should be replaced with checks - for `false`. - -- tidy: - . The $use_include_path parameter, which was not used internally, has been - removed from tidy_repair_string(). - . tidy::repairString() and tidy::repairFile() became static methods - -- Tokenizer: - . T_COMMENT tokens will no longer include a trailing newline. The newline will - instead be part of a following T_WHITESPACE token. It should be noted that - T_COMMENT is not always followed by whitespace, it may also be followed by - T_CLOSE_TAG or end-of-file. - . Namespaced names are now represented using the T_NAME_QUALIFIED (Foo\Bar), - T_NAME_FULLY_QUALIFIED (\Foo\Bar) and T_NAME_RELATIVE (namespace\Foo\Bar) - tokens. T_NS_SEPARATOR is only used for standalone namespace separators, - and only syntactially valid in conjunction with group use declarations. - RFC: https://wiki.php.net/rfc/namespaced_names_as_token - -- XML: - . xml_parser_create(_ns) will now return an XmlParser object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. The xml_parser_free() function no longer has an effect, - instead the XmlParser instance is automatically destroyed if it is no longer - referenced. - -- XMLReader: - . XMLReader::open() and XMLReader::xml() are now static methods. They still - can be called dynamically, though, but inheriting classes need to declare - them as static if they override these methods. - -- XMLWriter: - . The XMLWriter functions now accept and return, respectively, XMLWriter - objects instead of resources. - -- Zip: - . ZipArchive::OPSYS_Z_CPM has been removed (this name was a typo). Use - ZipArchive::OPSYS_CPM instead. - -- Zlib: - . gzgetss() has been removed. - . inflate_init() will now return an InflateContext object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . deflate_init() will now return a DeflateContext object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. - . zlib.output_compression is no longer automatically disabled for - Content-Type: image/*. - ======================================== 2. New Features ======================================== -- Core: - . Added support for union types. - RFC: https://wiki.php.net/rfc/union_types_v2 - . Added WeakMap. - RFC: https://wiki.php.net/rfc/weak_maps - . Added ValueError class. - . Any number of function parameters may now be replaced by a variadic - argument, as long as the types are compatible. For example, the following - code is now allowed: - - class A { - public function method(int $many, string $parameters, $here) {} - } - class B extends A { - public function method(...$everything) {} - } - . "static" (as in "late static binding") can now be used as a return type: - - class Test { - public function create(): static { - return new static(); - } - } - - RFC: https://wiki.php.net/rfc/static_return_type - . It is now possible to fetch the class name of an object using - `$object::class`. The result is the same as `get_class($object)`. - RFC: https://wiki.php.net/rfc/class_name_literal_on_object - . New and instanceof can now be used with arbitrary expressions, using - `new (expression)(...$args)` and `$obj instanceof (expression)`. - RFC: https://wiki.php.net/rfc/variable_syntax_tweaks - . Some consistency fixes to variable syntax have been applied, for example - writing `Foo::BAR::$baz` is now allowed. - RFC: https://wiki.php.net/rfc/variable_syntax_tweaks - . Added Stringable interface, which is automatically implemented if a class - defines a __toString() method. - RFC: https://wiki.php.net/rfc/stringable - . Traits can now define abstract private methods. - RFC: https://wiki.php.net/rfc/abstract_trait_method_validation - . `throw` can now be used as an expression. - RFC: https://wiki.php.net/rfc/throw_expression - . An optional trailing comma is now allowed in parameter lists. - RFC: https://wiki.php.net/rfc/trailing_comma_in_parameter_list - . It is now possible to write `catch (Exception)` to catch an exception - without storing it in a variable. - RFC: https://wiki.php.net/rfc/non-capturing_catches - . Added support for mixed type - RFC: https://wiki.php.net/rfc/mixed_type_v2 - . Added support for Attributes - RFC: https://wiki.php.net/rfc/attributes_v2 - RFC: https://wiki.php.net/rfc/attribute_amendments - RFC: https://wiki.php.net/rfc/shorter_attribute_syntax - RFC: https://wiki.php.net/rfc/shorter_attribute_syntax_change - . Added support for constructor property promotion (declaring properties in - the constructor signature). - RFC: https://wiki.php.net/rfc/constructor_promotion - . Added support for `match` expression. - RFC: https://wiki.php.net/rfc/match_expression_v2 - . Private methods declared on a parent class no longer enforce any - inheritance rules on the methods of a child class. (with the exception of - final private constructors) - RFC: https://wiki.php.net/rfc/inheritance_private_methods - . Added support for nullsafe operator (`?->`). - RFC: https://wiki.php.net/rfc/nullsafe_operator - . Added support for named arguments. - RFC: https://wiki.php.net/rfc/named_params - -- Date: - . Added DateTime::createFromInterface() and - DateTimeImmutable::createFromInterface(). - . Added the DateTime format specifier "p" which is the same as "P" but - returning "Z" for UTC. - -- Dom: - . Introduce DOMParentNode and DOMChildNode with new traversal and - manipulation APIs. - RFC: https://wiki.php.net/rfc/dom_living_standard_api - -- Enchant: - . enchant_dict_add() - . enchant_dict_is_added() - . LIBENCHANT_VERSION macro - -- FPM: - . Added a new option pm.status_listen that allows getting status from - different endpoint (e.g. port or UDS file) which is useful for getting - status when all children are busy with serving long running requests. - -- Hash: - . HashContext objects can now be serialized. - -- Opcache: - . If the opcache.record_warnings ini setting is enabled, opcache will record - compile-time warnings and replay them on the next include, even if it is - served from cache. - -- OpenSSL: - . Added Cryptographic Message Syntax (CMS) (RFC 5652) support composed of - functions for encryption, decryption, signing, verifying and reading. The - API is similar to the API for PKCS #7 functions with an addition of new - encoding constants: OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIME and - OPENSSL_ENCODING_PEM. - -- Standard: - . printf() and friends now support the %h and %H format specifiers. These - are the same as %g and %G, but always use "." as the decimal separator, - rather than determining it through the LC_NUMERIC locale. - . printf() and friends now support using "*" as width or precision, in which - case the width/precision is passed as an argument to printf. This also - allows using precision -1 with %g, %G, %h and %H. For example, the following - code can be used to reproduce PHP's default floating point formatting: - - printf("%.*H", (int) ini_get("precision"), $float); - printf("%.*H", (int) ini_get("serialize_precision"), $float); +- hash: + . Added MurmurHash3 with streaming support. The following variants are implemented - . proc_open() now supports pseudo-terminal (PTY) descriptors. The following - attaches stdin, stdout and stderr to the same PTY: - - $proc = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes); - - . proc_open() now supports socket pair descriptors. The following attaches - a distinct socket pair to stdin, stdout and stderr: - - $proc = proc_open( - $command, [['socket'], ['socket'], ['socket']], $pipes); - - Unlike pipes, sockets do not suffer from blocking I/O issues on Windows. - However, not all programs may work correctly with stdio sockets. - . Sorting functions are now stable, which means that equal-comparing elements - will retain their original order. - RFC: https://wiki.php.net/rfc/stable_sorting - . array_diff(), array_intersect() and their variations can now be used with - a single array as argument. This means that usages like the following are - now possible: - - // OK even if $excludes is empty. - array_diff($array, ...$excludes); - // OK even if $arrays only contains a single array. - array_intersect(...$arrays); - . The $flag parameter of ob_implicit_flush() was changed to accept bool - values rather than int. - -- Zip: - . Extension updated to version 1.19.1 - . New ZipArchive::lastId property to get index value of last added entry. - . Error can be checked after an archive is closed using ZipArchive::status, - ZipArchive::statusSys properties or ZipArchive::getStatusString() method. - . The remove_path option of ZipArchive::addGlob() and ::addPattern() is now - treated as arbitrary string prefix (for consistency with the add_path - option), whereas formerly it was treated as directory name. - . Optional compression / encryption features are listed in phpinfo. + - murmur3a, 32-bit hash + - murmur3c, 128-bit hash for x86 + - murmur3f, 128-bit hash for x64 ======================================== 3. Changes in SAPI modules ======================================== -- Apache: - . The PHP module has been renamed from php7_module to php_module. - ======================================== 4. Deprecated Functionality ======================================== -- Core: - . Declaring a required parameter after an optional one is deprecated. As an - exception, declaring a parameter of the form "Type $param = null" before - a required one continues to be allowed, because this pattern was sometimes - used to achieve nullable types in older PHP versions. - - function test($a = [], $b) {} // Deprecated - function test(Foo $a = null, $b) {} // Allowed - . Calling get_defined_functions() with $exclude_disabled explicitly set to - false is deprecated. get_defined_functions() will never include disabled - functions. - -- Enchant: - . enchant_broker_set_dict_path and enchant_broker_get_dict_path - not available in libenchant < 1.5 nor in libenchant-2 - . enchant_dict_add_to_personal, use enchant_dict_add instead - . enchant_dict_is_in_session, use enchant_dict_is_added instead - . enchant_broker_free and enchant_broker_free_dict, unset the object instead - . ENCHANT_MYSPELL and ENCHANT_ISPELL constants - -- LibXML: - . libxml_disable_entity_loader() has been deprecated. As libxml 2.9.0 is now - required, external entity loading is guaranteed to be disabled by default, - and this function is no longer needed to protect against XXE attacks. - -- PGSQL / PDO PGSQL: - . The constant PG_VERSION_STR has now the same value as PG_VERSION, and thus - is deprecated. - . Function aliases in the pgsql extension have been deprecated. - -- Zip: - . Using empty file as ZipArchive is deprecated. Libzip 1.6.0 - do not accept empty files as valid zip archives any longer. - Existing workaround will be removed in next version. - . The procedural API of Zip is deprecated. Use ZipArchive instead. - -- Reflection: - . ReflectionFunction::isDisabled() is deprecated, as it is no longer possible - to create a ReflectionFunction for a disabled function. This method now - always returns false. - . ReflectionParameter::getClass(), ReflectionParameter::isArray(), and - ReflectionParameter::isCallable() are deprecated. - ReflectionParameter::getType() and the ReflectionType APIs should be used - instead. - ======================================== 5. Changed Functions ======================================== -- Reflection: - . ReflectionClass::getConstants and ReflectionClass::getReflectionConstants results - can be now filtered via a new parameter `$filter`. 3 new constants were added to - be used with it: - - ReflectionClassConstant::IS_PUBLIC - ReflectionClassConstant::IS_PROTECTED - ReflectionClassConstant::IS_PRIVATE - -- Zip - . ZipArchive::addGlob and ZipArchive::addPattern methods accept more - values in the "options" array argument: - . flags - . comp_method - . comp_flags - . env_method - . enc_password - . ZipArchive::addEmptyDir, ZipArchive::addFile and aZipArchive::addFromString - methods have a new "flags" argument. This allows managing name encoding - (ZipArchive::FL_ENC_*) and entry replacement (ZipArchive::FL_OVERWRITE) - . ZipArchive::extractTo now restore file modification time. - ======================================== 6. New Functions ======================================== -- Core: - . Added get_resource_id($resource) function, which returns the same value as - (int) $resource. It provides the same functionality under a clearer API. - -- LDAP: - . Added ldap_count_references(), which returns the number of reference - messages in a search result. - -- OpenSSL: - . Added openssl_cms_encrypt() encrypts the message in the file with the - certificates and outputs the result to the supplied file. - . Added openssl_cms_decrypt() that decrypts the S/MIME message in the file - and outputs the results to the supplied file. - . Added openssl_cms_read() that exports the CMS file to an array of PEM - certificates. - . Added openssl_cms_sign() that signs the MIME message in the file with - a cert and key and output the result to the supplied file. - . Added openssl_cms_verify() that verifies that the data block is intact, - the signer is who they say they are, and returns the certs of the signers. - -- PCRE: - . Added preg_last_error_msg(), which returns a human-readable message for - the last PCRE error. It complements preg_last_error(), which returns an - integer enum instead. - -- SQLite3: - . Add SQLite3::setAuthorizer() and respective class constants to set a - userland callback that will be used to authorize or not an action on the - database. - PR: https://github.com/php/php-src/pull/4797 - -- Standard: - . Added - - str_contains(string $haystack, string $needle): bool - str_starts_with(string $haystack, string $needle): bool - str_ends_with(string $haystack, string $needle): bool - - functions, which check whether $haystack contains, starts with or ends with - $needle. - RFC: https://wiki.php.net/rfc/str_contains - RFC: https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions - . Added fdiv() function, which performs a floating-point division under - IEEE 754 semantics. Division by zero is considered well-defined and - will return one of Inf, -Inf or NaN. - . Added get_debug_type() function, which returns a type useful for error - messages. Unlike gettype(), it uses canonical type names, returns class - names for objects, and indicates the resource type for resources. - RFC: https://wiki.php.net/rfc/get_debug_type - -- Zip: - . ZipArchive::setMtimeName and ZipArchive::setMtimeIndex to set the - modification time of an entry. - . ZipArchive::setProgressCallback to provide updates during archive close. - . ZipArchive::setCancelCallback to allow cancellation during archive close. - . ZipArchive::replaceFile to replace an entry content. - . ZipArchive::isCompressionMethodSupported to check optional compression - features. - . ZipArchive::isEncryptionMethodSupported to check optional encryption - features. - ======================================== 7. New Classes and Interfaces ======================================== -- Tokenizer: - . The new PhpToken class adds an object-based interface to the tokenizer. - It provides a more uniform and ergonomic representation, while being more - memory efficient and faster. - RFC: https://wiki.php.net/rfc/token_as_object - ======================================== 8. Removed Extensions and SAPIs ======================================== -- XML-RPC: - . The xmlrpc extension has been unbundled and moved to PECL. - RFC: https://wiki.php.net/rfc/unbundle_xmlprc - ======================================== 9. Other Changes to Extensions ======================================== -- CURL: - . The CURL extension now requires at least libcurl 7.29.0. - . curl_init() will now return a CurlHandle object rather than a resource. - Return value checks using is_resource() should be replaced with - checks for `false`. The curl_close() function no longer has an effect, - instead the CurlHandle instance is automatically destroyed if it is no - longer referenced. - . curl_multi_init() will now return a CurlMultiHandle object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. The curl_multi_close() function no longer has an effect, - instead the CurlMultiHandle instance is automatically destroyed if it is no - longer referenced. - . curl_share_init() will now return a CurlShareHandle object rather than a - resource. Return value checks using is_resource() should be replaced with - checks for `false`. The curl_share_close() function no longer has an effect, - instead the CurlShareHandle instance is automatically destroyed if it is no - longer referenced. - . The deprecated parameter `$version` of curl_version() has been removed. - -- Date: - . DatePeriod now implements IteratorAggregate (instead of Traversable). - -- DOM: - . DOMNamedNodeMap now implements IteratorAggregate (instead of Traversable). - . DOMNodeList now implements IteratorAggregate (instead of Traversable). - -- Intl: - . IntlBreakIterator now implements IteratorAggregate (instead of Traversable). - . ResourceBundle now implements IteratorAggregate (instead of Traversable). - -- Enchant: - . The enchant extension now uses libenchant-2 by default when available. - libenchant version 1 is still supported but is deprecated and could - be removed in the future. - -- GD: - . The $num_points parameter of imagepolygon(), imageopenpolygon() and - imagefilledpolygon() is now optional, i.e. these functions may be called - with either 3 or 4 arguments. If the arguments is omitted, it is calculated - as count($points)/2. - . The function imagegetinterpolation() to get the current interpolation method - has been added. - -- JSON: - . The JSON extension cannot be disabled anymore and is always an integral part - of any PHP build, similar to the date extension. - -- MBString: - . The Unicode data tables have been updated to version 13.0.0. - -- PDO: - . PDOStatement now implements IteratorAggregate (instead of Traversable). - -- LibXML: - . The minimum required libxml version is now 2.9.0. This means that external - entity loading is now guaranteed to be disabled by default, and no extra - steps need to be taken to protect against XXE attacks. - -- MySQLi / PDO MySQL: - . When mysqlnd is not used (which is the default and recommended option), - the minimum supported libmysqlclient version is now 5.5. - . mysqli_result now implements IteratorAggregate (instead of Traversable). - -- PGSQL / PDO PGSQL: - . The PGSQL and PDO PGSQL extensions now require at least libpq 9.1. - -- Readline: - . Calling readline_completion_function() before the interactive prompt starts - (e.g. in auto_prepend_file) will now override the default interactive prompt - completion function. Previously, readline_completion_function() only worked - when called after starting the interactive prompt. - -- SimpleXML: - . SimpleXMLElement now implements RecursiveIterator and absorbed the - functionality of SimpleXMLIterator. SimpleXMLIterator is an empty extension - of SimpleXMLElement. - -- Shmop: - . shmop_open() will now return a Shmop object rather than a resource. Return - value checks using is_resource() should be replaced with checks for `false`. - The shmop_close() function no longer has an effect, and is deprecated; - instead the Shmop instance is automatically destroyed if it is no longer - referenced. +- OpenSSL: + . The OpenSSL extension now requires at least OpenSSL version 1.0.2. ======================================== 10. New Global Constants ======================================== -- Filter: - . FILTER_VALIDATE_BOOL has been added as an alias for FILTER_VALIDATE_BOOLEAN. - The new name is preferred, as it uses the canonical type name. - ======================================== 11. Changes to INI File Handling ======================================== -- zend.exception_string_param_max_len - . New INI directive to set the maximum string length in an argument of a - stringified stack strace. - -- com.dotnet_version - . New INI directive to choose the version of the .NET framework to use for - dotnet objects. - ======================================== 12. Windows Support ======================================== -- Standard: - . Program execution functions (proc_open(), exec(), popen() etc.) using the - shell now consistently execute `%comspec% /s /c "$commandline"`, which has - the same effect as executing `$commandline` (without additional quotes). - -- GD: - . php_gd2.dll has been renamed to php_gd.dll. - -- php-test-pack: - . The test runner has been renamed from run-test.php to run-tests.php, to - match its name in php-src. +. The macro IGNORE_URL_WIN has been removed; it had no effect as of PHP 5.0.0. ======================================== 13. Other Changes ======================================== -- EBCDIC targets are no longer supported, though it's unlikely that they were - still working in the first place. - ======================================== 14. Performance Improvements ======================================== - -- A Just-In-Time (JIT) compiler has been added to the opcache extension. -- array_slice() on an array without gaps will no longer scan the whole array to - find the start offset. This may significantly reduce the runtime of the - function with large offsets and small lengths. -- strtolower() now uses a SIMD implementation when using the "C" LC_CTYPE - locale (which is the default). diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index c15cbef3b1..3e2aeb70a4 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -1,35 +1,8 @@ -PHP 8.0 INTERNALS UPGRADE NOTES +PHP 8.1 INTERNALS UPGRADE NOTES 1. Internal API changes - a. Object Handlers API - b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler - c. TSRM changes - d. get() and set() object handlers - e. zend_parse_parameters 'L' specifier - f. Arginfo argument types - g. zend_free_op type and should_free argument of zend_get_zval_ptr() - h. zend_value_error() - i. get_closure() object handler - j. compare_objects() and compare() object handlers - k. The 'I' length modifier - l. Some VM instructions switched to IS_TMP_VAR result instead of IS_VAR - m. All internal functions must have arginfo - n. zend_hash_sort compare function and zend_hash_sort signature change - o. cast_object() object handler is now required - p. ARG_COUNT() macro removed - q. GC_COLLECTABLE flag - r. Cannot implement Traversable only - s. zend_fcall_info no_separation flag removed - t. Signature changes - u. Error Notification callbacks to replace zend_error_cb overwrite use-cases - v. Removed Zend APIs - w. Renamed Zend APIs - x. ZEND_EXT_NOP no longer emitted 2. Build system changes - a. Abstract - b. Unix build system changes - c. Windows build system changes 3. Module changes @@ -37,425 +10,10 @@ PHP 8.0 INTERNALS UPGRADE NOTES 1. Internal API changes ======================== - a. The Object Handlers API was changed to receive zend_object* instead of - zval* and zend_string* instead of zval* for property names. See also - section t for other similar changes. - - b. ZEND_OVERLOADED_FUNCTION and corresponding call_method() object handler - were removed. ZEND_INTERNAL_FUNCTION with ZEND_ACC_CALL_VIA_HANDLER and - defined "handler" callback should be used instead. This "handler" callback - should also take care about function cleanup. See ext/zend_test/test.c - for example. - - c. The following things have been removed from TSRM: - - TSRMLS_DC - - TSRMLS_D - - TSRMLS_CC - - TSRMLS_C - - TSRMLS_FETCH - - TSRMLS_FETCH_FROM_CTX - - TSRMLS_SET_CTX - - tsrm_new_interpreter_context - - tsrm_set_interpreter_context - - tsrm_free_interpreter_context - - support for GNUPTH, SGI ST, and BETHREADS - - d. The get() and set() object handlers have been removed. The get() handler - can generally be replaced with cast_object(). Some uses of set() may be - replaced by do_operation(). If set() was used to overload direct - assignments using "=", then this is no longer supported and the - functionality should be provided in some other way (for example, as - modification of an object property). - - e. The zend_parse_parameters 'L' specifier and the Z_PARAM_STRICT_LONG() - family of macros have been removed. Use 'l' and Z_PARAM_LONG() instead, - which, despite the confusing name, actually have stricter input validation. - - f. Arginfo argument types for internal functions are no longer checked. - Instead type checks should be performed using the zend_parse_parameters() - or ZEND_PARSE_PARAMETERS_*() APIs. - - g. The zend_free_op type and the "should_free" and "type" arguments of - zend_get_zval_ptr() were removed. It's possible to get the old - "should_free" value using the following code: - - zval *ret = zend_get_zval_ptr( - opline, opline->op1_type, &opline->op1, execute_data); - zval *should_free = (op_type & (IS_TMP_VAR|IS_VAR)) ? ret : NULL; - - h. Added the zend_value_error() function, which is intended to be used - to raise ValueError when inappropriate argument values are passed - to functions. - - i. get_closure() object handlers now accept an additional zend_bool parameter - `check_only`. If it is true, the handler is called to check whether the - object is callable; in this case the handler should not throw an exception. - - j. compare_objects() handler was removed. Extensions should use compare() object - handler instead and check if both arguments are objects and have the same - compare handler, using ZEND_COMPARE_OBJECTS_FALLBACK() macro. - - k. The 'I' length modifier, used to denote 32 and 64bit integer from the custom - snprintf and spprintf implementations has been removed. - Use the ZEND_LONG_FMT, ZEND_ULONG_FMT and ZEND_XLONG_FMT macros defined in - php-src/Zend/zend_long.h - - The 'v' format from the custom snprintf and spprintf implementations has - been removed. Use the standard 's' format instead. - - l. Some VM instructions switched to IS_TMP_VAR result instead of IS_VAR. - Actually, all assignments (ZEND_ASSIGN, ZEND_ASSIGN_DIM, ZEND_ASSIGN_OBJ, - ZEND_ASSIGN_STATIC_PROP), all compound assignments (ZEND_ASSIGN_OP, - ZEND_ASSIGN_DIM_OP, ZEND_ASSIGN_OBJ_OP, ZEND_ASSIGN_STATIC_PROP_OP) and all - pre increments/decrements (ZEND_PRE_INC, ZEND_PRE_DEC, ZEND_PRE_INC_OBJ - ZEND_PRE_DEC_OBJ, ZEND_PRE_INC_STATIC_PROP ZEND_PRE_DEC_STATIC_PROP). - - m. All internal functions and methods are now required to specify arginfo - information, otherwise warnings will be thrown on startup. - - n. The zend_hash_sort and zend_hash_minmax APIs now accept a comparison - function with the following signature: - - typedef int (*bucket_compare_func_t)(Bucket *a, Bucket *b); - - Previously compare_func_t was used, which accepted void pointers. - Furthermore, the return type of zend_hash_sort and zend_ts_hash_sort has - been changed from int to void; these functions always succeed. - - o. The cast_object() handler is now required, i.e. must be non-null. You can - indicate that casting is not supported by always returning FAILURE. - - p. The ARG_COUNT() macro has been removed use ZEND_NUM_ARGS() instead. - - q. GC_COLLECTABLE flag was inverted into GC_NOT_COLLECTABLE. - Assignments to GC_TYPE_INFO() might need to be changed to properly - set the value of the GC_NOT_COLLECTABLE flag. - - r. Just for for userland classes, it is no longer allowed to implement only - the Traversable interface. Instead, it is necessary to implement either - Iterator or IteratorAggregate. You can do the latter by implementing - zend_ce_aggregate and providing the following method implementation: - - ZEND_METHOD(MyClass, getIterator) { - ZEND_PARSE_PARAMETERS_NONE(); - zend_create_internal_iterator_zval(return_value, ZEND_THIS); - } - - s. The zend_fcall_info no_separation flag has been removed, and separation is - never allowed. If you wish to pass (or allow passing) arguments by - reference, explicitly create those arguments as references using - ZEND_MAKE_REF. This removal also affects call_user_function_ex(), which - should be replaced by call_user_function(). - - t. The following ZEND_API function have changed signature: - 1. Void in Zend Engine 4.0: - - add_assoc_*() - - add_index_*() - - add_property_*() - - object_init() - - zend_declare_class_constant*() - - zend_declare_property*() - - zend_startup_modules() - - zend_wrong_parameters_none_error() - - zend_fcall_info_argp() - - zend_fcall_info_argv() - - zend_fcall_info_argn() - - zend_startup() - - zend_set_memory_limit() - - pass_two() - - zend_startup_constants() - - zend_shutdown_constants() - - zend_startup_extensions_mechanism() - - zend_startup_extensions() - - zend_register_extension() - - highlight_string() - - zend_ini_startup() - - zend_ini_shutdown() - - zend_ini_global_shutdown() - - zend_ini_deactivate() - - zend_copy_ini_directives() - - zend_prepare_string_for_scanning() - - zend_init_rsrc_list() - - zend_list_close() - - zend_signal() - - zend_sigaction() - - zend_stack_init() - - zend_stack_del_top() - - zend_stack_destroy() - 2. Argument int to uint32_t in Zend Engine 4.0: - - _zend_get_parameters_array_ex() - - zend_copy_parameters_array() - - zend_fcall_info_args_save() - - zend_fcall_info_args_restore() - - zend_fcall_info_argp() - - zend_fcall_info_argv() - - zend_fcall_info_argn() - - zend_wrong_parameter*() - - zend_wrong_callback_error() - - zend_parse_arg_class() - 3. Argument int to bool in Zend Engine 4.0: - - add_next_index_bool() - - zend_register_class_alias_ex() - - add_assoc_bool_ex() - - add_index_bool() - - zend_fcall_info_args_clear() - - zend_set_local_var() - - zend_set_local_var_str() - - zend_parse_arg_*() - - shutdown_memory_manager() - - zend_memory_usage() - - zend_memory_peak_usage() - - zend_mm_shutdown() - - zend_eval_string*() - - zend_set_timeout() - - _zend_hash_append_ex() - - _zend_hash_append_ptr_ex() - - zend_alter_ini_entry_ex() - - (*zend_encoding_list_parser) typedef - - zend_multibyte_parse_encoding_list() - - zend_safe_address() - - zend_string_tolower_ex() - - zend_string_alloc() - - zend_string_safe_alloc() - - zend_string_init() - - zend_string_dup() - - zend_string_realloc() - - zend_string_extend() - - zend_string_truncate() - - zend_string_safe_realloc() - - zend_string_release_ex() - - zend_ts_hash_merge() - - zend_ts_hash_sort() - 4. Argument int to size_t in Zend Engine 4.0: - - zend_set_hash_symbol() - 5. Argument zval* to zend_object* in Zend Engine 4.0: - - zend_read_property() - - zend_update_property() - - zend_unset_property() - - zend_call_method() - - zend_objects_clone_obj() - - zend_get_closure_method_def() - - zend_throw_exception_hook() - - zend_throw_exception_internal() - - zend_get_exception_base() - 6. Argument zval* to zend_long in Zend Engine 4.0: - - _php_math_longtobase() - 7. Return type from int to zend_result in Zend Engine 4.0: - - (*stream_open_function) in _zend_utility_functions - - (*zend_post_startup_cb) - - (*zend_preload_autoload) - - zend_execute_scripts() - - zend_post_startup() - - _zend_get_parameters_array_ex() - - zend_copy_parameters_array() - - zend_parse_parameters() - - zend_parse_parameters_ex() - - zend_parse_method_parameters() - - zend_parse_method_parameters_ex() - - zend_parse_method_parameters() - - zend_register_functions() - - zend_startup_module() - - zend_startup_module_ex() - - zend_register_class_alias_ex() - - zend_disable_function() - - zend_disable_class() - - zend_update_class_constants() - - zend_update_static_property*() - - object_init_ex() - - object_and_properties_init() - - add_index_zval() - - add_next_index_long_*() - - array_set_zval_key() - - _call_user_function_impl() - - zend_fcall_info_*() - - zend_call_function() - - zend_set_hash_symbol() - - zend_delete_global_variable() - - zend_set_local_var() - - zend_set_local_var_str() - - zend_forbid_dynamic_call() - - zend_get_default_from_internal_arg_info() - - zend_try_assign_typed_ref*() - - zend_ast_evaluate() - - zend_startup_builtin_functions() - - do_bind_function() - - do_bind_class() - - zend_unmangle_property_name_ex() - - zend_register_auto_global() - - zend_register_constant() - - zend_exception_error() - - zend_eval_string*() - - zend_undefined_offset_write() - - zend_undefined_index_write() - - zval_update_constant(_ex)() - - zend_load_extension() - - zend_load_extension_handle() - - zend_hash_del(_ind)() - - zend_hash_str_del(_ind)() - - zend_hash_index_del() - - zend_hash_move_forward_ex() - - zend_hash_move_backward_ex() - - zend_hash_get_current_key_ex() - - zend_hash_get_current_key_type_ex() - - zend_symtable_del(_ind)() - - zend_symtable_str_del(_ind)() - - highlight_file() - - zend_do_link_class() - - zend_alter_ini_entry*() - - zend_restore_ini_entry() - - zend_ini_register_displayer() - - zend_ini_open_file_for_scanning() - - zend_ini_prepare_string_for_scanning() - - zend_user_it_valid() - - zend_create_internal_iterator_zval() - - zend_multibyte_set_filter() - - zend_lex_tstring() - - _zend_module_entry module_startup_func, module_shutdown_func, - request_startup_func, request_shutdown_func, and post_deactivate_func function pointers - - (*zend_encoding_list_parser) typedef - - (*zend_encoding_internal_encoding_setter) typedef - - zend_multibyte_set_functions() - - zend_multibyte_set_script_encoding_by_string() - - add_function() - - sub_function() - - mul_function() - - pow_function() - - div_function() - - mod_function() - - boolean_xor_function() - - boolean_not_function() - - bitwise_not_function() - - bitwise_or_function() - - bitwise_and_function() - - bitwise_xor_function() - - shift_left_function() - - shift_right_function() - - concat_function() - - is_equal_function( - - is_identical_function() - - is_not_identical_function() - - is_not_equal_function() - - is_smaller_function() - - is_smaller_or_equal_function(zv - - increment_function() - - decrement_function() - - zend_stream_open() - - zend_stream_fixup() - - zend_ts_hash_del() - - zend_ts_hash_index_del() - 8. Return type from int to bool in Zend Engine 4.0: - - zend_make_printable_zval() - - zend_parse_arg_*() - - is_zend_mm() - - is_zend_ptr() - - zend_mm_is_custom_heap() - - (*zend_mm_chunk_truncate_t) - - (*zend_mm_chunk_extend_t) - - zend_bitset_empty() - - zend_is_smart_branch() - - zend_check_arg_send_type() - - zend_verify_const_access() - - zend_gdb_register_code() - - zend_gdb_present() - - _zend_handle_numeric_str(_ex)() - - zend_hash_exists_ind() - - zend_hash_str_exists_ind() - - zend_symtable_exists(_ind)() - - zend_symtable_str_exists() - - (*zend_encoding_lexer_compatibility_checker) - - zend_object_is_true() - - i_zend_is_true() - - zendi_smart_streq() - - zend_stack_is_empty() - - zend_ts_hash_exists() - - zend_ts_hash_index_exists() - 9. Argument void to const char* in Zend Engine 4.0: - - zend_get_op_array_extension_handle() - 10. Argument zend_extension to const char* in Zend Engine 4.0: - - zend_get_resource_handle() - 11. Argument const char * to HMODULE in Zend Engine 4.0: - - php_win32_image_compatible() - 12. const char * argument dropped in Zend Engine 4.0: - - php_win32_crt_compatible() - - u. Instead of overwriting zend_error_cb extensions with debugging, monitoring - use-cases catching Errors/Exceptions are strongly encouraged to use - the new error observer API instead. - - Error observering callbacks are guaranteed to be called regardless of - the users error_reporting setting or userland error handler return values. - - Register observer callbacks during MINIT of an extension: - - void my_error_observer_cb(int type, - const char *error_filename, - uint32_t error_lineno, - zend_string *message) { - } - zend_observer_error_register(my_error_observer_cb); - - v. The following APIs have been removed from the Zend Engine: - - zend_ts_hash_init_ex(), drop the last argument and use zend_ts_hash_init() instead - - zend_hash_init_ex(), drop the last argument and use zend_hash_init() instead - - zval_internal_dtor(), use zval_internal_ptr_dtor() instead - - zval_dtor_func(), use rc_dtor_func() instead - - zval_ptr_dtor_wrapper(), use zval_ptr_dtor() instead - - zval_internal_ptr_dtor_wrapper(), use zval_internal_ptr_dtor() instead - - w. The following APIs have been renamed: - - _zend_ts_hash_init() to zend_ts_hash_init() - - x. In COMPILE_EXTENDED_STMT mode, a ZEND_EXT_NOP opcode will no longer be - generated at the start of a function. Use the new observer APIs or hook - into zend_execute_ex instead. - ======================== 2. Build system changes ======================== - a. Abstract - 1. Symbol HAVE_HASH_EXT is removed and is no longer defined. It should be - considered to have hash extension always available since PHP 7.4. - - 2. Symbol HAVE_PCRE is removed and is no longer defined. It should be - considered to have pcre extension always available since PHP 7.4. - - 3. Symbol HAVE_LOCALE_H has been removed and is no longer defined. - - 4. --disable-inline-optimization (which actually disabled all compiler - optimizations) has been removed. If you wish to build PHP on a host - with extremely constrained memory, and compilation fails with an "out - of memory" message, add "-O0" to CFLAGS. - - 5. build system and provider are displayed in phpinfo from environment: - - PHP_BUILD_SYSTEM (default is same as PHP_UNAME) - - PHP_BUILD_PROVIDER (no default) - - b. Unix build system changes - - 1. --enable-maintainer-zts is renamed --enable-zts for parity with Windows - and as recognition that ZTS is not a "maintainer" or experimental - feature. - - 2. The PHP_CHECK_GCC_ARG() m4 macro has been removed in favor of - AX_CHECK_COMPILE_FLAG(). - - 3. The 6th argument of PHP_ADD_SOURCES_X has been removed. - - 4. The 'special-flags' (3rd) argument of PHP_ADD_SOURCES_X are - now appended instead of prepended to previous compiler flags. - This means compiler flags passed to PHP_NEW_EXTENSION and PHP_ADD_SOURCES - are now appended, this allows to disable compiler flags set by Zend/Zend.m4 - (e.g. disable certain compiler flags enabled by -Wextra) - - c. Windows build system changes - - - The configuration option --enable-crt-debug has been removed. The VC - debug heap can now be enabled for debug builds by setting the environment - variable PHP_WIN32_DEBUG_HEAP to a non-negative number before PHP process - startup. - ======================== 3. Module changes ======================== - diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 7261885974..0a9170709d 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -215,6 +215,10 @@ fi test -n "$GCC" && CFLAGS="-Wall -Wextra -Wno-strict-aliasing -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-sign-compare $CFLAGS" dnl Check if compiler supports -Wno-clobbered (only GCC) AX_CHECK_COMPILE_FLAG([-Wno-clobbered], CFLAGS="-Wno-clobbered $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-Wduplicated-cond], CFLAGS="-Wduplicated-cond $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-Wlogical-op], CFLAGS="-Wlogical-op $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-Wformat-truncation], CFLAGS="-Wformat-truncation $CFLAGS", , [-Werror]) +AX_CHECK_COMPILE_FLAG([-fno-common], CFLAGS="-fno-common $CFLAGS", , [-Werror]) test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS" diff --git a/Zend/tests/multibyte/multibyte_encoding_001.phpt b/Zend/tests/multibyte/multibyte_encoding_001.phpt index 3b26dcb989..f95b4311a9 100644 --- a/Zend/tests/multibyte/multibyte_encoding_001.phpt +++ b/Zend/tests/multibyte/multibyte_encoding_001.phpt @@ -13,7 +13,7 @@ internal_encoding=SJIS <?php declare(encoding='Shift_JIS'); $s = "•\"; // 0x95+0x5c in script, not somewhere else " -printf("%x:%x\n", ord($s[0]), ord($s[1])); +printf("%x:%x", ord($s[0]), ord($s[1])); ?> --EXPECT-- 95:5c diff --git a/Zend/tests/multibyte/multibyte_encoding_003.phpt b/Zend/tests/multibyte/multibyte_encoding_003.phpt Binary files differindex a0983329f4..f0fb60f6cd 100644 --- a/Zend/tests/multibyte/multibyte_encoding_003.phpt +++ b/Zend/tests/multibyte/multibyte_encoding_003.phpt diff --git a/Zend/zend.h b/Zend/zend.h index c10fadd0d0..f5d352cfe4 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.0.0-dev" +#define ZEND_VERSION "4.1.0-dev" #define ZEND_ENGINE_3 diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 290db040b2..c095992d12 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -1314,6 +1314,7 @@ ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char * } while (0) #define ZEND_PARSE_PARAMETERS_END_EX(failure) \ + ZEND_ASSERT(_i == _max_num_args || _max_num_args == (uint32_t) -1); \ } while (0); \ if (UNEXPECTED(_error_code != ZPP_ERROR_OK)) { \ if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \ diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index ab96d43c4c..62cee34452 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -155,8 +155,8 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval return variable_ptr; } -ZEND_API zend_result zval_update_constant(zval *pp); -ZEND_API zend_result zval_update_constant_ex(zval *pp, zend_class_entry *scope); +ZEND_API zend_result ZEND_FASTCALL zval_update_constant(zval *pp); +ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *pp, zend_class_entry *scope); /* dedicated Zend executor functions - do not use! */ struct _zend_vm_stack { diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 4248212238..8fb85f0d2f 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -610,7 +610,7 @@ ZEND_API zend_bool zend_is_executing(void) /* {{{ */ } /* }}} */ -ZEND_API zend_result zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ +ZEND_API zend_result ZEND_FASTCALL zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ { if (Z_TYPE_P(p) == IS_CONSTANT_AST) { zend_ast *ast = Z_ASTVAL_P(p); @@ -638,7 +638,7 @@ ZEND_API zend_result zval_update_constant_ex(zval *p, zend_class_entry *scope) / } /* }}} */ -ZEND_API zend_result zval_update_constant(zval *pp) /* {{{ */ +ZEND_API zend_result ZEND_FASTCALL zval_update_constant(zval *pp) /* {{{ */ { return zval_update_constant_ex(pp, EG(current_execute_data) ? zend_get_executed_scope() : CG(active_class_entry)); } diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index 9f96d3b0fa..3f330d2a2c 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -44,7 +44,7 @@ You can use the following macro to check the extension API version for compatibi /* The first number is the engine version and the rest is the date (YYYYMMDD). * This way engine 2/3 API no. is always greater than engine 1 API no.. */ -#define ZEND_EXTENSION_API_NO 420200930 +#define ZEND_EXTENSION_API_NO 420201009 typedef struct _zend_extension_version_info { int zend_extension_api_no; diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 68c1865c00..6973ad1020 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -165,14 +165,14 @@ static void zend_generator_remove_child(zend_generator_node *node, zend_generato { ZEND_ASSERT(node->children >= 1); if (node->children == 1) { - node->child.single.child = NULL; + node->child.single = NULL; } else { HashTable *ht = node->child.ht; zend_hash_index_del(ht, (zend_ulong) child); if (node->children == 2) { zend_generator *other_child; ZEND_HASH_FOREACH_PTR(ht, other_child) { - node->child.single.child = other_child; + node->child.single = other_child; break; } ZEND_HASH_FOREACH_END(); zend_hash_destroy(ht); @@ -479,13 +479,13 @@ static void zend_generator_add_child(zend_generator *generator, zend_generator * zend_generator_node *node = &generator->node; if (node->children == 0) { - node->child.single.child = child; + node->child.single = child; } else { if (node->children == 1) { HashTable *ht = emalloc(sizeof(HashTable)); zend_hash_init(ht, 0, NULL, NULL, 0); zend_hash_index_add_new_ptr(ht, - (zend_ulong) node->child.single.child, node->child.single.child); + (zend_ulong) node->child.single, node->child.single); node->child.ht = ht; } @@ -524,7 +524,7 @@ ZEND_API zend_generator *zend_generator_update_root(zend_generator *generator) static zend_generator *get_new_root(zend_generator *generator, zend_generator *root) { while (!root->execute_data && root->node.children == 1) { - root = root->node.child.single.child; + root = root->node.child.single; } if (root->execute_data) { diff --git a/Zend/zend_generators.h b/Zend/zend_generators.h index 35ff09c99d..a082e46114 100644 --- a/Zend/zend_generators.h +++ b/Zend/zend_generators.h @@ -41,10 +41,7 @@ struct _zend_generator_node { uint32_t children; union { HashTable *ht; /* if multiple children */ - struct { /* if one child */ - zend_generator *leaf; /* TODO: Unused, remove. */ - zend_generator *child; - } single; + zend_generator *single; /* if one child */ } child; /* One generator can cache a direct pointer to the current root. * The leaf member points back to the generator using the root cache. */ diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h index c4f819d508..e54a339ec4 100644 --- a/Zend/zend_highlight.h +++ b/Zend/zend_highlight.h @@ -40,7 +40,7 @@ BEGIN_EXTERN_C() ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini); ZEND_API void zend_strip(void); ZEND_API zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini); -ZEND_API void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name); +ZEND_API void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name); ZEND_API void zend_html_putc(char c); ZEND_API void zend_html_puts(const char *s, size_t len); END_EXTERN_C() diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index d1c5b85cf2..cd31878eb9 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -851,17 +851,13 @@ zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *sy return SUCCESS; } -void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name) +void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name) { zend_lex_state original_lex_state; - zval tmp; - - if (UNEXPECTED(Z_TYPE_P(str) != IS_STRING)) { - ZVAL_STR(&tmp, zval_get_string_func(str)); - str = &tmp; - } + zval str_zv; + ZVAL_STR_COPY(&str_zv, str); zend_save_lexical_state(&original_lex_state); - zend_prepare_string_for_scanning(str, str_name); + zend_prepare_string_for_scanning(&str_zv, str_name); BEGIN(INITIAL); zend_highlight(syntax_highlighter_ini); if (SCNG(script_filtered)) { @@ -869,9 +865,7 @@ void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter SCNG(script_filtered) = NULL; } zend_restore_lexical_state(&original_lex_state); - if (UNEXPECTED(str == &tmp)) { - zval_ptr_dtor(&tmp); - } + zval_ptr_dtor(&str_zv); } ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding) diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h index 30d70bbf53..98957def76 100644 --- a/Zend/zend_modules.h +++ b/Zend/zend_modules.h @@ -31,7 +31,7 @@ #define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module #define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module -#define ZEND_MODULE_API_NO 20200930 +#define ZEND_MODULE_API_NO 20201009 #ifdef ZTS #define USING_ZTS 1 #else diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dabf35b3d2..1932b1cdee 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -103,3 +103,8 @@ jobs: configurationName: DEBUG_NTS_FILE_CACHE configurationParameters: '--enable-debug --disable-zts' timeoutInMinutes: 90 + - template: azure/job.yml + parameters: + configurationName: DEBUG_NTS_REPEAT + configurationParameters: '--enable-debug --disable-zts' + runTestsParameters: '--repeat 2' diff --git a/azure/apt.yml b/azure/apt.yml index 71f58ce8da..aa27d4a551 100644 --- a/azure/apt.yml +++ b/azure/apt.yml @@ -42,6 +42,11 @@ steps: snmp-mibs-downloader \ unixodbc-dev \ llvm \ - libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd \ + libc-client-dev \ + libkrb5-dev \ + dovecot-core \ + dovecot-pop3d \ + dovecot-imapd \ + sendmail \ ${{ parameters.packages }} displayName: 'APT' diff --git a/azure/setup.yml b/azure/setup.yml index e0b4dc79da..489df88159 100644 --- a/azure/setup.yml +++ b/azure/setup.yml @@ -20,8 +20,8 @@ steps: set -e sudo groupadd -g 5000 vmail sudo useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail - sudo cp ext/imap/tests/dovecot.conf /etc/dovecot/dovecot.conf - sudo cp ext/imap/tests/dovecotpass /etc/dovecot/dovecotpass + sudo cp ext/imap/tests/setup/dovecot.conf /etc/dovecot/dovecot.conf + sudo cp ext/imap/tests/setup/dovecotpass /etc/dovecot/dovecotpass sudo service dovecot restart displayName: 'Configure IMAP' diff --git a/build/php.m4 b/build/php.m4 index 16c5e25fba..fe2f176e3c 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -1903,7 +1903,7 @@ dnl AC_DEFUN([PHP_SETUP_OPENSSL],[ found_openssl=no - PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.1], [found_openssl=yes]) + PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.2], [found_openssl=yes]) if test "$found_openssl" = "yes"; then PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1) diff --git a/configure.ac b/configure.ac index 8d6e922fa9..6b33047538 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.0.1-dev],[https://bugs.php.net],[php],[https://www.php.net]) +AC_INIT([PHP],[8.1.0-dev],[https://bugs.php.net],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER diff --git a/ext/ftp/ftp.stub.php b/ext/ftp/ftp.stub.php index f4812655a4..698cfe215c 100644 --- a/ext/ftp/ftp.stub.php +++ b/ext/ftp/ftp.stub.php @@ -2,133 +2,57 @@ /** @generate-function-entries */ -/** @return resource|false */ -function ftp_connect(string $hostname, int $port = 21, int $timeout = 90) {} +function ftp_connect(string $hostname, int $port = 21, int $timeout = 90): FTPConnection|false {} #ifdef HAVE_FTP_SSL -/** @return resource|false */ -function ftp_ssl_connect(string $hostname, int $port = 21, int $timeout = 90) {} +function ftp_ssl_connect(string $hostname, int $port = 21, int $timeout = 90): FTPConnection|false {} #endif -/** @param resource $ftp */ -function ftp_login($ftp, string $username, string $password): bool {} - -/** @param resource $ftp */ -function ftp_pwd($ftp): string|false {} - -/** @param resource $ftp */ -function ftp_cdup($ftp): bool {} - -/** @param resource $ftp */ -function ftp_chdir($ftp, string $directory): bool {} - -/** @param resource $ftp */ -function ftp_exec($ftp, string $command): bool {} - -/** @param resource $ftp */ -function ftp_raw($ftp, string $command): array {} - -/** @param resource $ftp */ -function ftp_mkdir($ftp, string $directory): string|false {} - -/** @param resource $ftp */ -function ftp_rmdir($ftp, string $directory): bool {} - -/** @param resource $ftp */ -function ftp_chmod($ftp, int $permissions, string $filename): int|false {} - -/** - * @param resource $ftp - * @param string $response - */ -function ftp_alloc($ftp, int $size, &$response = null): bool {} - -/** @param resource $ftp */ -function ftp_nlist($ftp, string $directory): array|false {} - -/** @param resource $ftp */ -function ftp_rawlist($ftp, string $directory, bool $recursive = false): array|false {} - -/** @param resource $ftp */ -function ftp_mlsd($ftp, string $directory): array|false {} - -/** @param resource $ftp */ -function ftp_systype($ftp): string|false {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_fget($ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_nb_fget($ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} - -/** @param resource $ftp */ -function ftp_pasv($ftp, bool $enable): bool {} - -/** @param resource $ftp */ -function ftp_get($ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** @param resource $ftp */ -function ftp_nb_get($ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} - -/** @param resource $ftp */ -function ftp_nb_continue($ftp): int {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_fput($ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** - * @param resource $ftp - * @param resource $stream - */ -function ftp_nb_fput($ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): int {} - -/** @param resource $ftp */ -function ftp_put($ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} - -/** @param resource $ftp */ -function ftp_append($ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY): bool {} - -/** @param resource $ftp */ -function ftp_nb_put($ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): int|false {} - -/** @param resource $ftp */ -function ftp_size($ftp, string $filename): int {} - -/** @param resource $ftp */ -function ftp_mdtm($ftp, string $filename): int {} - -/** @param resource $ftp */ -function ftp_rename($ftp, string $from, string $to): bool {} - -/** @param resource $ftp */ -function ftp_delete($ftp, string $filename): bool {} - -/** @param resource $ftp */ -function ftp_site($ftp, string $command): bool {} - -/** @param resource $ftp */ -function ftp_close($ftp): bool {} - -/** - * @param resource $ftp - * @alias ftp_close - */ -function ftp_quit($ftp): bool {} - -/** - * @param resource $ftp - * @param int|bool $value - */ -function ftp_set_option($ftp, int $option, $value): bool {} - -/** @param resource $ftp */ -function ftp_get_option($ftp, int $option): int|bool {} +function ftp_login(FTPConnection $ftp, string $username, string $password): bool {} +function ftp_pwd(FTPConnection $ftp): string|false {} +function ftp_cdup(FTPConnection $ftp): bool {} +function ftp_chdir(FTPConnection $ftp, string $directory): bool {} +function ftp_exec(FTPConnection $ftp, string $command): bool {} +function ftp_raw(FTPConnection $ftp, string $command): array {} +function ftp_mkdir(FTPConnection $ftp, string $directory): string|false {} +function ftp_rmdir(FTPConnection $ftp, string $directory): bool {} +function ftp_chmod(FTPConnection $ftp, int $permissions, string $filename): int|false {} + +/** @param string $response */ +function ftp_alloc(FTPConnection $ftp, int $size, &$response = null): bool {} +function ftp_nlist(FTPConnection $ftp, string $directory): array|false {} +function ftp_rawlist(FTPConnection $ftp, string $directory, bool $recursive = false): array|false {} +function ftp_mlsd(FTPConnection $ftp, string $directory): array|false {} +function ftp_systype(FTPConnection $ftp): string|false {} + +/** @param resource $stream */ +function ftp_fget(FTPConnection $ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} + +/** @param resource $stream */ +function ftp_nb_fget(FTPConnection $ftp, $stream, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} +function ftp_pasv(FTPConnection $ftp, bool $enable): bool {} +function ftp_get(FTPConnection $ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} +function ftp_nb_get(FTPConnection $ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): int {} +function ftp_nb_continue(FTPConnection $ftp): int {} + +/** @param resource $stream */ +function ftp_fput(FTPConnection $ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): bool {} + +/** @param resource $stream */ +function ftp_nb_fput(FTPConnection $ftp, string $remote_filename, $stream, int $mode = FTP_BINARY, int $offset = 0): int {} +function ftp_put(FTPConnection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): bool {} +function ftp_append(FTPConnection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY): bool {} +function ftp_nb_put(FTPConnection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): int|false {} +function ftp_size(FTPConnection $ftp, string $filename): int {} +function ftp_mdtm(FTPConnection $ftp, string $filename): int {} +function ftp_rename(FTPConnection $ftp, string $from, string $to): bool {} +function ftp_delete(FTPConnection $ftp, string $filename): bool {} +function ftp_site(FTPConnection $ftp, string $command): bool {} +function ftp_close(FTPConnection $ftp): bool {} + +/** @alias ftp_close */ +function ftp_quit(FTPConnection $ftp): bool {} + +/** @param int|bool $value */ +function ftp_set_option(FTPConnection $ftp, int $option, $value): bool {} +function ftp_get_option(FTPConnection $ftp, int $option): int|bool {} diff --git a/ext/ftp/ftp_arginfo.h b/ext/ftp/ftp_arginfo.h index e1a9d770bc..30251b87ee 100644 --- a/ext/ftp/ftp_arginfo.h +++ b/ext/ftp/ftp_arginfo.h @@ -1,14 +1,14 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4957601533b387d70ebb15811821fc06507cdbc2 */ + * Stub hash: 151310a13eeeb2bbf4df1ab38a3a29506b26a570 */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_connect, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_ftp_connect, 0, 1, FTPConnection, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "21") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "90") ZEND_END_ARG_INFO() #if defined(HAVE_FTP_SSL) -ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_ssl_connect, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_ftp_ssl_connect, 0, 1, FTPConnection, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "21") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "90") @@ -16,60 +16,60 @@ ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_login, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_pwd, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_cdup, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_chdir, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_exec, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_raw, 0, 2, IS_ARRAY, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_mkdir, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ftp_rmdir arginfo_ftp_chdir ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_chmod, 0, 3, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, permissions, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_alloc, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, response, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_rawlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, recursive, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -79,7 +79,7 @@ ZEND_END_ARG_INFO() #define arginfo_ftp_systype arginfo_ftp_pwd ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fget, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -87,7 +87,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fget, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fget, 0, 3, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -95,12 +95,12 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fget, 0, 3, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_pasv, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_get, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -108,7 +108,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_get, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_get, 0, 3, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -116,11 +116,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_get, 0, 3, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_continue, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fput, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -128,7 +128,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fput, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fput, 0, 3, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_INFO(0, stream) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -136,7 +136,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_fput, 0, 3, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_put, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -144,14 +144,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_put, 0, 3, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_append, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_put, 0, 3, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, remote_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, local_filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY") @@ -159,20 +159,20 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_put, 0, 3, MAY_BE_LONG|MA ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_size, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_ftp_mdtm arginfo_ftp_size ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_rename, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, from, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_delete, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -183,13 +183,13 @@ ZEND_END_ARG_INFO() #define arginfo_ftp_quit arginfo_ftp_cdup ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_set_option, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_get_option, 0, 2, MAY_BE_LONG|MAY_BE_BOOL) - ZEND_ARG_INFO(0, ftp) + ZEND_ARG_OBJ_INFO(0, ftp, FTPConnection, 0) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_END_ARG_INFO() diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c index a6dca8c874..30bffbdd8c 100644 --- a/ext/ftp/php_ftp.c +++ b/ext/ftp/php_ftp.c @@ -29,13 +29,15 @@ #include "ext/standard/info.h" #include "ext/standard/file.h" +#include "Zend/zend_exceptions.h" +#include "Zend/zend_interfaces.h" #include "php_ftp.h" #include "ftp.h" #include "ftp_arginfo.h" -static int le_ftpbuf; -#define le_ftpbuf_name "FTP Buffer" +static zend_class_entry *php_ftp_ce = NULL; +static zend_object_handlers ftp_object_handlers; zend_module_entry php_ftp_module_entry = { STANDARD_MODULE_HEADER_EX, @@ -56,15 +58,42 @@ zend_module_entry php_ftp_module_entry = { ZEND_GET_MODULE(php_ftp) #endif -static void ftp_destructor_ftpbuf(zend_resource *rsrc) -{ - ftpbuf_t *ftp = (ftpbuf_t *)rsrc->ptr; +typedef struct _php_ftp_object { + ftpbuf_t *ftp; + zend_object std; +} php_ftp_object; + +static inline zend_object *ftp_object_to_zend_object(php_ftp_object *obj) { + return ((zend_object*)(obj + 1)) - 1; +} + +static inline php_ftp_object *ftp_object_from_zend_object(zend_object *zobj) { + return ((php_ftp_object*)(zobj + 1)) - 1; +} + +static zend_object* ftp_object_create(zend_class_entry* ce) { + php_ftp_object *obj = zend_object_alloc(sizeof(php_ftp_object), ce); + zend_object *zobj = ftp_object_to_zend_object(obj); + obj->ftp = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &ftp_object_handlers; - ftp_close(ftp); + return zobj; +} + +static void ftp_object_destroy(zend_object *zobj) { + php_ftp_object *obj = ftp_object_from_zend_object(zobj); + + if (obj->ftp) { + ftp_close(obj->ftp); + } } PHP_MINIT_FUNCTION(ftp) { + zend_class_entry ce; + #ifdef HAVE_FTP_SSL #if OPENSSL_VERSION_NUMBER < 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER) SSL_library_init(); @@ -76,7 +105,18 @@ PHP_MINIT_FUNCTION(ftp) #endif #endif - le_ftpbuf = zend_register_list_destructors_ex(ftp_destructor_ftpbuf, NULL, le_ftpbuf_name, module_number); + INIT_CLASS_ENTRY(ce, "FTPConnection", NULL); + php_ftp_ce = zend_register_internal_class(&ce); + php_ftp_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + php_ftp_ce->create_object = ftp_object_create; + php_ftp_ce->serialize = zend_class_serialize_deny; + php_ftp_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&ftp_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + ftp_object_handlers.offset = XtOffsetOf(php_ftp_object, std); + ftp_object_handlers.dtor_obj = ftp_object_destroy; + ftp_object_handlers.clone_obj = NULL; + REGISTER_LONG_CONSTANT("FTP_ASCII", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_TEXT", FTPTYPE_ASCII, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("FTP_BINARY", FTPTYPE_IMAGE, CONST_PERSISTENT | CONST_CS); @@ -143,7 +183,8 @@ PHP_FUNCTION(ftp_connect) ftp->use_ssl = 0; #endif - RETURN_RES(zend_register_resource(ftp, le_ftpbuf)); + object_init_ex(return_value, php_ftp_ce); + ftp_object_from_zend_object(Z_OBJ_P(return_value))->ftp = ftp; } /* }}} */ @@ -177,11 +218,19 @@ PHP_FUNCTION(ftp_ssl_connect) /* enable ssl */ ftp->use_ssl = 1; - RETURN_RES(zend_register_resource(ftp, le_ftpbuf)); + object_init_ex(return_value, php_ftp_ce); + ftp_object_from_zend_object(Z_OBJ_P(return_value))->ftp = ftp; } /* }}} */ #endif +#define GET_FTPBUF(ftpbuf, zftp) \ + ftpbuf = ftp_object_from_zend_object(Z_OBJ_P(zftp))->ftp; \ + if (!ftpbuf) { \ + zend_throw_exception(zend_ce_value_error, "FTPConnection is already closed", 0); \ + RETURN_THROWS(); \ + } + /* {{{ Logs into the FTP server */ PHP_FUNCTION(ftp_login) { @@ -190,13 +239,10 @@ PHP_FUNCTION(ftp_login) char *user, *pass; size_t user_len, pass_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &z_ftp, &user, &user_len, &pass, &pass_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &z_ftp, php_ftp_ce, &user, &user_len, &pass, &pass_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* log in */ if (!ftp_login(ftp, user, user_len, pass, pass_len)) { @@ -215,13 +261,10 @@ PHP_FUNCTION(ftp_pwd) ftpbuf_t *ftp; const char *pwd; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!(pwd = ftp_pwd(ftp))) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -238,13 +281,10 @@ PHP_FUNCTION(ftp_cdup) zval *z_ftp; ftpbuf_t *ftp; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp_cdup(ftp)) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -263,13 +303,10 @@ PHP_FUNCTION(ftp_chdir) char *dir; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* change directories */ if (!ftp_chdir(ftp, dir, dir_len)) { @@ -289,13 +326,10 @@ PHP_FUNCTION(ftp_exec) char *cmd; size_t cmd_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &cmd, &cmd_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* execute serverside command */ if (!ftp_exec(ftp, cmd, cmd_len)) { @@ -315,13 +349,10 @@ PHP_FUNCTION(ftp_raw) char *cmd; size_t cmd_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &cmd, &cmd_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* execute arbitrary ftp command */ ftp_raw(ftp, cmd, cmd_len, return_value); @@ -337,13 +368,10 @@ PHP_FUNCTION(ftp_mkdir) zend_string *tmp; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* create directory */ if (NULL == (tmp = ftp_mkdir(ftp, dir, dir_len))) { @@ -363,13 +391,10 @@ PHP_FUNCTION(ftp_rmdir) char *dir; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* remove directorie */ if (!ftp_rmdir(ftp, dir, dir_len)) { @@ -390,13 +415,10 @@ PHP_FUNCTION(ftp_chmod) size_t filename_len; zend_long mode; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlp", &z_ftp, &mode, &filename, &filename_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olp", &z_ftp, php_ftp_ce, &mode, &filename, &filename_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp_chmod(ftp, mode, filename, filename_len)) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -415,13 +437,10 @@ PHP_FUNCTION(ftp_alloc) zend_long size, ret; zend_string *response = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl|z", &z_ftp, &size, &zresponse) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol|z", &z_ftp, php_ftp_ce, &size, &zresponse) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); ret = ftp_alloc(ftp, size, zresponse ? &response : NULL); @@ -445,13 +464,10 @@ PHP_FUNCTION(ftp_nlist) char **nlist, **ptr, *dir; size_t dir_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Op", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get list of files */ if (NULL == (nlist = ftp_nlist(ftp, dir, dir_len))) { @@ -475,13 +491,10 @@ PHP_FUNCTION(ftp_rawlist) size_t dir_len; zend_bool recursive = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|b", &z_ftp, &dir, &dir_len, &recursive) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|b", &z_ftp, php_ftp_ce, &dir, &dir_len, &recursive) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get raw directory listing */ if (NULL == (llist = ftp_list(ftp, dir, dir_len, recursive))) { @@ -505,13 +518,10 @@ PHP_FUNCTION(ftp_mlsd) size_t dir_len; zval entry; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &dir, &dir_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get raw directory listing */ if (NULL == (llist = ftp_mlsd(ftp, dir, dir_len))) { @@ -539,13 +549,10 @@ PHP_FUNCTION(ftp_systype) ftpbuf_t *ftp; const char *syst; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (NULL == (syst = ftp_syst(ftp))) { php_error_docref(NULL, E_WARNING, "%s", ftp->inbuf); @@ -567,13 +574,10 @@ PHP_FUNCTION(ftp_fget) size_t file_len; zend_long mode=FTPTYPE_IMAGE, resumepos=0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rrs|ll", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ors|ll", &z_ftp, php_ftp_ce, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_res(stream, Z_RES_P(z_file)); XTYPE(xtype, mode); @@ -612,13 +616,10 @@ PHP_FUNCTION(ftp_nb_fget) size_t file_len; zend_long mode=FTPTYPE_IMAGE, resumepos=0, ret; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rrs|ll", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ors|ll", &z_ftp, php_ftp_ce, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_res(stream, Z_RES_P(z_file)); XTYPE(xtype, mode); @@ -657,13 +658,10 @@ PHP_FUNCTION(ftp_pasv) ftpbuf_t *ftp; zend_bool pasv; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rb", &z_ftp, &pasv) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &z_ftp, php_ftp_ce, &pasv) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp_pasv(ftp, pasv ? 1 : 0)) { RETURN_FALSE; @@ -684,13 +682,10 @@ PHP_FUNCTION(ftp_get) size_t local_len, remote_len; zend_long mode=FTPTYPE_IMAGE, resumepos=0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|ll", &z_ftp, php_ftp_ce, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); /* ignore autoresume if autoseek is switched off */ @@ -749,13 +744,10 @@ PHP_FUNCTION(ftp_nb_get) int ret; zend_long mode=FTPTYPE_IMAGE, resumepos=0; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss|ll", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss|ll", &z_ftp, php_ftp_ce, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); /* ignore autoresume if autoseek is switched off */ @@ -816,13 +808,10 @@ PHP_FUNCTION(ftp_nb_continue) ftpbuf_t *ftp; zend_long ret; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); if (!ftp->nb) { php_error_docref(NULL, E_WARNING, "No nbronous transfer to continue"); @@ -859,13 +848,10 @@ PHP_FUNCTION(ftp_fput) php_stream *stream; char *remote; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsr|ll", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osr|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_zval(stream, z_file); XTYPE(xtype, mode); @@ -908,13 +894,10 @@ PHP_FUNCTION(ftp_nb_fput) php_stream *stream; char *remote; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsr|ll", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osr|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); php_stream_from_res(stream, Z_RES_P(z_file)); XTYPE(xtype, mode); @@ -961,13 +944,10 @@ PHP_FUNCTION(ftp_put) zend_long mode=FTPTYPE_IMAGE, startpos=0; php_stream *instream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", REPORT_ERRORS, NULL))) { @@ -1014,13 +994,10 @@ PHP_FUNCTION(ftp_append) zend_long mode=FTPTYPE_IMAGE; php_stream *instream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|l", &z_ftp, php_ftp_ce, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", REPORT_ERRORS, NULL))) { @@ -1049,13 +1026,10 @@ PHP_FUNCTION(ftp_nb_put) zend_long mode=FTPTYPE_IMAGE, startpos=0, ret; php_stream *instream; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Opp|ll", &z_ftp, php_ftp_ce, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); XTYPE(xtype, mode); if (!(instream = php_stream_open_wrapper(local, mode == FTPTYPE_ASCII ? "rt" : "rb", REPORT_ERRORS, NULL))) { @@ -1107,13 +1081,10 @@ PHP_FUNCTION(ftp_size) char *file; size_t file_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &file, &file_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Op", &z_ftp, php_ftp_ce, &file, &file_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get file size */ RETURN_LONG(ftp_size(ftp, file, file_len)); @@ -1128,13 +1099,10 @@ PHP_FUNCTION(ftp_mdtm) char *file; size_t file_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &file, &file_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Op", &z_ftp, php_ftp_ce, &file, &file_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* get file mod time */ RETURN_LONG(ftp_mdtm(ftp, file, file_len)); @@ -1149,13 +1117,10 @@ PHP_FUNCTION(ftp_rename) char *src, *dest; size_t src_len, dest_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss", &z_ftp, php_ftp_ce, &src, &src_len, &dest, &dest_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* rename the file */ if (!ftp_rename(ftp, src, src_len, dest, dest_len)) { @@ -1175,13 +1140,10 @@ PHP_FUNCTION(ftp_delete) char *file; size_t file_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &file, &file_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &file, &file_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* delete the file */ if (!ftp_delete(ftp, file, file_len)) { @@ -1201,13 +1163,10 @@ PHP_FUNCTION(ftp_site) char *cmd; size_t cmd_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &z_ftp, php_ftp_ce, &cmd, &cmd_len) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); /* send the site command */ if (!ftp_site(ftp, cmd, cmd_len)) { @@ -1223,18 +1182,19 @@ PHP_FUNCTION(ftp_site) PHP_FUNCTION(ftp_close) { zval *z_ftp; - ftpbuf_t *ftp; + php_ftp_object *obj; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &z_ftp, php_ftp_ce) == FAILURE) { RETURN_THROWS(); } - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { - RETURN_THROWS(); + obj = ftp_object_from_zend_object(Z_OBJ_P(z_ftp)); + if (obj->ftp) { + ftp_quit(obj->ftp); + ftp_close(obj->ftp); + obj->ftp = NULL; } - ftp_quit(ftp); - RETURN_TRUE; } /* }}} */ @@ -1246,13 +1206,10 @@ PHP_FUNCTION(ftp_set_option) zend_long option; ftpbuf_t *ftp; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlz", &z_ftp, &option, &z_value) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olz", &z_ftp, php_ftp_ce, &option, &z_value) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: @@ -1298,13 +1255,10 @@ PHP_FUNCTION(ftp_get_option) zend_long option; ftpbuf_t *ftp; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &z_ftp, &option) == FAILURE) { - RETURN_THROWS(); - } - - if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &z_ftp, php_ftp_ce, &option) == FAILURE) { RETURN_THROWS(); } + GET_FTPBUF(ftp, z_ftp); switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: diff --git a/ext/ftp/tests/007.phpt b/ext/ftp/tests/007.phpt index 0520b37293..1ae879f901 100644 --- a/ext/ftp/tests/007.phpt +++ b/ext/ftp/tests/007.phpt @@ -180,36 +180,36 @@ try { fclose($ftp); ?> --EXPECT-- -ftp_login(): supplied resource is not a valid FTP Buffer resource -ftp_pwd(): supplied resource is not a valid FTP Buffer resource -ftp_cdup(): supplied resource is not a valid FTP Buffer resource -ftp_chdir(): supplied resource is not a valid FTP Buffer resource -ftp_exec(): supplied resource is not a valid FTP Buffer resource -ftp_raw(): supplied resource is not a valid FTP Buffer resource -ftp_mkdir(): supplied resource is not a valid FTP Buffer resource -ftp_rmdir(): supplied resource is not a valid FTP Buffer resource -ftp_chmod(): supplied resource is not a valid FTP Buffer resource -ftp_alloc(): supplied resource is not a valid FTP Buffer resource -ftp_nlist(): supplied resource is not a valid FTP Buffer resource -ftp_rawlist(): supplied resource is not a valid FTP Buffer resource -ftp_mlsd(): supplied resource is not a valid FTP Buffer resource -ftp_systype(): supplied resource is not a valid FTP Buffer resource -ftp_fget(): supplied resource is not a valid FTP Buffer resource -ftp_nb_fget(): supplied resource is not a valid FTP Buffer resource -ftp_pasv(): supplied resource is not a valid FTP Buffer resource -ftp_get(): supplied resource is not a valid FTP Buffer resource -ftp_nb_get(): supplied resource is not a valid FTP Buffer resource -ftp_nb_continue(): supplied resource is not a valid FTP Buffer resource -ftp_fput(): supplied resource is not a valid FTP Buffer resource -ftp_nb_fput(): supplied resource is not a valid FTP Buffer resource -ftp_put(): supplied resource is not a valid FTP Buffer resource -ftp_append(): supplied resource is not a valid FTP Buffer resource -ftp_nb_put(): supplied resource is not a valid FTP Buffer resource -ftp_size(): supplied resource is not a valid FTP Buffer resource -ftp_mdtm(): supplied resource is not a valid FTP Buffer resource -ftp_rename(): supplied resource is not a valid FTP Buffer resource -ftp_delete(): supplied resource is not a valid FTP Buffer resource -ftp_site(): supplied resource is not a valid FTP Buffer resource -ftp_close(): supplied resource is not a valid FTP Buffer resource -ftp_set_option(): supplied resource is not a valid FTP Buffer resource -ftp_get_option(): supplied resource is not a valid FTP Buffer resource +ftp_login(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_pwd(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_cdup(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_chdir(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_exec(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_raw(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_mkdir(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_rmdir(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_chmod(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_alloc(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nlist(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_rawlist(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_mlsd(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_systype(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_fget(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_fget(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_pasv(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_get(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_get(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_continue(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_fput(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_fput(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_put(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_append(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_nb_put(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_size(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_mdtm(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_rename(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_delete(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_site(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_close(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_set_option(): Argument #1 ($ftp) must be of type FTPConnection, resource given +ftp_get_option(): Argument #1 ($ftp) must be of type FTPConnection, resource given diff --git a/ext/ftp/tests/CONFLICTS b/ext/ftp/tests/CONFLICTS deleted file mode 100644 index 254defddb5..0000000000 --- a/ext/ftp/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -server diff --git a/ext/ftp/tests/dead-resource.phpt b/ext/ftp/tests/dead-resource.phpt new file mode 100644 index 0000000000..75a9931d54 --- /dev/null +++ b/ext/ftp/tests/dead-resource.phpt @@ -0,0 +1,24 @@ +--TEST-- +Attempt to use a closed FTPConnection +--SKIPIF-- +<?php +require 'skipif.inc'; +--FILE-- +<?php +require 'server.inc'; + +$ftp = ftp_connect('127.0.0.1', $port); +if (!$ftp) die("Couldn't connect to the server"); +var_dump(ftp_login($ftp, 'user', 'pass')); +var_dump(ftp_close($ftp)); + +try { + var_dump(ftp_login($ftp, 'user', 'pass')); + echo "Login did not throw\n"; +} catch (ValueError $ex) { + echo "Exception: ", $ex->getMessage(), "\n"; +} +--EXPECT-- +bool(true) +bool(true) +Exception: FTPConnection is already closed diff --git a/ext/ftp/tests/ftp_set_option_errors.phpt b/ext/ftp/tests/ftp_set_option_errors.phpt index 3f5476f6c3..5e5ef328f3 100644 --- a/ext/ftp/tests/ftp_set_option_errors.phpt +++ b/ext/ftp/tests/ftp_set_option_errors.phpt @@ -13,40 +13,22 @@ $ftp = ftp_connect('127.0.0.1', $port); ftp_login($ftp, 'user', 'pass'); $ftp or die("Couldn't connect to the server"); -try { - ftp_set_option($ftp, FTP_TIMEOUT_SEC, 0); -} catch (ValueError $exception) { - echo $exception->getMessage() . "\n"; +$options = [ + [ 'option' => FTP_TIMEOUT_SEC, 'value' => 0 ], + [ 'option' => FTP_TIMEOUT_SEC, 'value' => '0' ], + [ 'option' => FTP_USEPASVADDRESS, 'value' => ['1'] ], + [ 'option' => FTP_AUTOSEEK, 'value' => 'true' ], + [ 'option' => FOO_BAR, 'value' => 1 ], +]; +foreach ($options as $option) try { + var_dump(ftp_set_option($ftp, $option['option'], $option['value'])); +} catch (\Throwable $ex) { + echo "Exception: ", $ex->getMessage(), "\n"; } -try { - ftp_set_option($ftp, FTP_TIMEOUT_SEC, '0'); -} catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - ftp_set_option($ftp, FTP_USEPASVADDRESS, ['1']); -} catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - ftp_set_option($ftp, FTP_AUTOSEEK, 'true'); -} catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; -} - -try { - ftp_set_option($ftp, FOO_BAR, 1); -} catch (ValueError $exception) { - echo $exception->getMessage() . "\n"; -} - -?> --EXPECT-- -ftp_set_option(): Argument #3 ($value) must be greater than 0 for the FTP_TIMEOUT_SEC option -ftp_set_option(): Argument #3 ($value) must be of type int for the FTP_TIMEOUT_SEC option, string given -ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_USEPASVADDRESS option, array given -ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_AUTOSEEK option, string given -ftp_set_option(): Argument #2 ($option) must be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESS +Exception: ftp_set_option(): Argument #3 ($value) must be greater than 0 for the FTP_TIMEOUT_SEC option +Exception: ftp_set_option(): Argument #3 ($value) must be of type int for the FTP_TIMEOUT_SEC option, string given +Exception: ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_USEPASVADDRESS option, array given +Exception: ftp_set_option(): Argument #3 ($value) must be of type bool for the FTP_AUTOSEEK option, string given +Exception: ftp_set_option(): Argument #2 ($option) must be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESS diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index 38599391d6..8bc836fc40 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -4,59 +4,21 @@ $socket = null; $errno = 0; $context = stream_context_create(array('ssl' => array('local_cert' => dirname(__FILE__).'/cert.pem'))); -for ($i=0; $i<10 && !$socket; ++$i) { - $port = rand(50000, 65535); - - $socket = @stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); -} -//set anther random port that is not the same as $port -do{ - $pasv_port = rand(50000, 65535); -}while($pasv_port == $port); - +$socket = stream_socket_server("tcp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); if (!$socket) { echo "$errstr ($errno)\n"; die("could not start/bind the ftp server\n"); } -$pid = pcntl_fork(); +$socket_name = stream_socket_get_name($socket, false); +$port = (int) substr($socket_name, strrpos($socket_name, ':') + 1); -function pasv_listen($action){ - global $pasv_port, $tmp_file; - $tmp_file = 'nm2.php'; - $pid = pcntl_fork(); - if($pid === 0){ - $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port"); - $fs = stream_socket_accept($soc, 3); - switch ($action) { - case 'fget': - case 'get': - //listen for 3 seconds 3 seconds - fputs($fs, "I am passive.\r\n"); - break; - case 'put': - file_put_contents($tmp_file, stream_get_contents($fs)); - break; - case 'list': - fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 .\r\n"); - fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 ..\r\n"); - fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 public_ftp\r\n"); - break; - case 'list_null': - fputs($fs, "\r\n"); - break; - } - fclose($fs); - exit; - } -} +$pid = pcntl_fork(); if ($pid) { - function dump_and_exit($buf) { var_dump($buf); - fclose($GLOBALS['s']); exit; } @@ -90,10 +52,14 @@ if ($pid) { if (!$s) die("Error accepting a new connection\n"); + register_shutdown_function(function() use($pid, $s) { + fclose($s); + pcntl_waitpid($pid, $status); + }); + fputs($s, "220----- PHP FTP server 0.3 -----\r\n220 Service ready\r\n"); $buf = fread($s, 2048); - function user_auth($buf) { global $user, $s, $ssl, $bug37799; @@ -143,7 +109,6 @@ if ($pid) { $user = $m[1]; if ($user !== 'user' && $user !== 'anonymous') { fputs($s, "530 Not logged in.\r\n"); - fclose($s); exit; } @@ -163,7 +128,6 @@ if ($pid) { fputs($s, "230 User logged in\r\n"); } else { fputs($s, "530 Not logged in.\r\n"); - fclose($s); exit; } } @@ -432,25 +396,20 @@ if ($pid) { $i=0; if (empty($bug73457)) { - do { - if (!empty($ssl)) { - $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); - } else { - $soc = @stream_socket_server("tcp://127.0.0.1:$pasv_port"); - } - /* Could bind port, Try another port */ - if (!$soc) { - $pasv_port = rand(50000, 65535); - } - $i++; - } while ($i<10 && !$soc); - + if (!empty($ssl)) { + $soc = stream_socket_server("tcp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); + } else { + $soc = stream_socket_server("tcp://127.0.0.1:0"); + } if (!$soc) { echo "$errstr ($errno)\n"; die("could not bind passive port\n"); } + + $soc_name = stream_socket_get_name($soc, false); + $pasv_port = (int) substr($soc_name, strrpos($soc_name, ':') + 1); } else { - $pasv_port=1234; + $pasv_port = 1234; } $p2 = $pasv_port % ((int) 1 << 8); @@ -548,7 +507,6 @@ if ($pid) { dump_and_exit($buf); } } - fclose($s); exit; } diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 88d04824ea..d811b66866 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -57,8 +57,6 @@ #include "gd_compat.h" -static int le_gd_font; - #include <gd.h> #include <gd_errors.h> #include <gdfontt.h> /* 1 Tiny font */ @@ -235,6 +233,75 @@ static void php_gd_object_minit_helper() php_gd_image_object_handlers.offset = XtOffsetOf(php_gd_image_object, std); } +static zend_class_entry *gd_font_ce = NULL; +static zend_object_handlers php_gd_font_object_handlers; + +typedef struct _php_gd_font_object { + gdFontPtr font; + zend_object std; +} php_gd_font_object; + +static php_gd_font_object *php_gd_font_object_from_zend_object(zend_object *zobj) +{ + return ((php_gd_font_object*)(zobj + 1)) - 1; +} + +static zend_object *php_gd_font_object_to_zend_object(php_gd_font_object *obj) +{ + return ((zend_object*)(obj + 1)) - 1; +} + +static zend_object *php_gd_font_object_create(zend_class_entry *ce) +{ + php_gd_font_object *obj = zend_object_alloc(sizeof(php_gd_font_object), ce); + zend_object *zobj = php_gd_font_object_to_zend_object(obj); + + obj->font = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &php_gd_font_object_handlers; + + return zobj; +} + +static void php_gd_font_object_free(zend_object *zobj) +{ + php_gd_font_object *obj = php_gd_font_object_from_zend_object(zobj); + + if (obj->font) { + if (obj->font->data) { + efree(obj->font->data); + } + efree(obj->font); + obj->font = NULL; + } + + zend_object_std_dtor(zobj); +} + +static zend_function *php_gd_font_object_get_constructor(zend_object *object) +{ + zend_throw_error(NULL, "You cannot initialize a GdFont object except through helper functions"); + return NULL; +} + +static void php_gd_font_minit_helper() +{ + zend_class_entry ce; + INIT_CLASS_ENTRY(ce, "GdFont", class_GdFont_methods); + gd_font_ce = zend_register_internal_class(&ce); + gd_font_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + gd_font_ce->create_object = php_gd_font_object_create; + gd_font_ce->serialize = zend_class_serialize_deny; + gd_font_ce->unserialize = zend_class_unserialize_deny; + + /* setting up the object handlers for the GdFont class */ + memcpy(&php_gd_font_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + php_gd_font_object_handlers.clone_obj = NULL; + php_gd_font_object_handlers.free_obj = php_gd_font_object_free; + php_gd_font_object_handlers.get_constructor = php_gd_font_object_get_constructor; + php_gd_font_object_handlers.offset = XtOffsetOf(php_gd_font_object, std); +} /********************************************************* * @@ -265,19 +332,6 @@ PHP_INI_BEGIN() PHP_INI_END() /* }}} */ -/* {{{ php_free_gd_font */ -static void php_free_gd_font(zend_resource *rsrc) -{ - gdFontPtr fp = (gdFontPtr) rsrc->ptr; - - if (fp->data) { - efree(fp->data); - } - - efree(fp); -} -/* }}} */ - /* {{{ php_gd_error_method */ void php_gd_error_method(int type, const char *format, va_list args) { @@ -302,8 +356,8 @@ void php_gd_error_method(int type, const char *format, va_list args) /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(gd) { - le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number); php_gd_object_minit_helper(); + php_gd_font_minit_helper(); #if defined(HAVE_GD_FREETYPE) && defined(HAVE_GD_BUNDLED) gdFontCacheMutexSetup(); @@ -614,7 +668,6 @@ PHP_FUNCTION(gd_info) /* {{{ Load a new font */ PHP_FUNCTION(imageloadfont) { - zval *ind; zend_string *file; int hdr_size = sizeof(gdFont) - sizeof(char *); int body_size, n = 0, b, i, body_size_check; @@ -625,7 +678,7 @@ PHP_FUNCTION(imageloadfont) RETURN_THROWS(); } - stream = php_stream_open_wrapper(ZSTR_VAL(file), "rb", IGNORE_PATH | IGNORE_URL_WIN | REPORT_ERRORS, NULL); + stream = php_stream_open_wrapper(ZSTR_VAL(file), "rb", IGNORE_PATH | REPORT_ERRORS, NULL); if (stream == NULL) { RETURN_FALSE; } @@ -704,13 +757,8 @@ PHP_FUNCTION(imageloadfont) } php_stream_close(stream); - ind = zend_list_insert(font, le_gd_font); - - /* Adding 5 to the font index so we will never have font indices - * that overlap with the old fonts (with indices 1-5). The first - * list index given out is always 1. - */ - RETURN_LONG(Z_RES_HANDLE_P(ind) + 5); + object_init_ex(return_value, gd_font_ce); + php_gd_font_object_from_zend_object(Z_OBJ_P(return_value))->font = font; } /* }}} */ @@ -1584,7 +1632,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, } - stream = php_stream_open_wrapper(file, "rb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); + stream = php_stream_open_wrapper(file, "rb", REPORT_ERRORS|IGNORE_PATH, NULL); if (stream == NULL) { RETURN_FALSE; } @@ -1883,7 +1931,7 @@ PHP_FUNCTION(imagexbm) im = php_gd_libgdimageptr_from_zval_p(imgind); if (file != NULL) { - stream = php_stream_open_wrapper(file, "wb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); + stream = php_stream_open_wrapper(file, "wb", REPORT_ERRORS|IGNORE_PATH, NULL); if (stream == NULL) { RETURN_FALSE; } @@ -2695,42 +2743,21 @@ PHP_FUNCTION(imagefilledpolygon) /* }}} */ /* {{{ php_find_gd_font */ -static gdFontPtr php_find_gd_font(int size) +static gdFontPtr php_find_gd_font(zend_object *font_obj, zend_long font_int) { - gdFontPtr font; + if (font_obj) { + return php_gd_font_object_from_zend_object(font_obj)->font; + } - switch (size) { - case 1: - font = gdFontTiny; - break; - case 2: - font = gdFontSmall; - break; - case 3: - font = gdFontMediumBold; - break; - case 4: - font = gdFontLarge; - break; - case 5: - font = gdFontGiant; - break; - default: { - zval *zv = zend_hash_index_find(&EG(regular_list), size - 5); - if (!zv || (Z_RES_P(zv))->type != le_gd_font) { - if (size < 1) { - font = gdFontTiny; - } else { - font = gdFontGiant; - } - } else { - font = (gdFontPtr)Z_RES_P(zv)->ptr; - } - } - break; - } - - return font; + switch (font_int) { + case 1: return gdFontTiny; + case 2: return gdFontSmall; + case 3: return gdFontMediumBold; + case 4: return gdFontLarge; + case 5: return gdFontGiant; + } + + return font_int < 1 ? gdFontTiny : gdFontGiant; } /* }}} */ @@ -2740,14 +2767,15 @@ static gdFontPtr php_find_gd_font(int size) */ static void php_imagefontsize(INTERNAL_FUNCTION_PARAMETERS, int arg) { - zend_long SIZE; + zend_object *font_obj; + zend_long font_int; gdFontPtr font; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &SIZE) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJ_OF_CLASS_OR_LONG(font_obj, gd_font_ce, font_int) + ZEND_PARSE_PARAMETERS_END(); - font = php_find_gd_font(SIZE); + font = php_find_gd_font(font_obj, font_int); RETURN_LONG(arg ? font->h : font->w); } /* }}} */ @@ -2801,17 +2829,24 @@ static void php_gdimagecharup(gdImagePtr im, gdFontPtr f, int x, int y, int c, i static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode) { zval *IM; - zend_long SIZE, X, Y, COL; + zend_long X, Y, COL; char *C; size_t C_len; gdImagePtr im; - int ch = 0, col, x, y, size, i, l = 0; + int ch = 0, col, x, y, i, l = 0; unsigned char *str = NULL; + zend_object *font_obj; + zend_long font_int; gdFontPtr font; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olllsl", &IM, gd_image_ce, &SIZE, &X, &Y, &C, &C_len, &COL) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(6, 6) + Z_PARAM_OBJECT_OF_CLASS(IM, gd_image_ce) + Z_PARAM_OBJ_OF_CLASS_OR_LONG(font_obj, gd_font_ce, font_int) + Z_PARAM_LONG(X) + Z_PARAM_LONG(Y) + Z_PARAM_STRING(C, C_len) + Z_PARAM_LONG(COL) + ZEND_PARSE_PARAMETERS_END(); im = php_gd_libgdimageptr_from_zval_p(IM); @@ -2826,9 +2861,8 @@ static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode) y = Y; x = X; - size = SIZE; - font = php_find_gd_font(size); + font = php_find_gd_font(font_obj, font_int); switch (mode) { case 0: @@ -4092,7 +4126,7 @@ static gdIOCtx *create_stream_context_from_zval(zval *to_zval) { return NULL; } - stream = php_stream_open_wrapper(Z_STRVAL_P(to_zval), "wb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); + stream = php_stream_open_wrapper(Z_STRVAL_P(to_zval), "wb", REPORT_ERRORS|IGNORE_PATH, NULL); if (stream == NULL) { return NULL; } diff --git a/ext/gd/gd.stub.php b/ext/gd/gd.stub.php index fe0d5658ee..0ef410fc1e 100644 --- a/ext/gd/gd.stub.php +++ b/ext/gd/gd.stub.php @@ -2,13 +2,12 @@ /** @generate-function-entries */ -final class GdImage -{ -} +final class GdImage {} +final class GdFont {} function gd_info(): array {} -function imageloadfont(string $filename): int|false {} +function imageloadfont(string $filename): GdFont|false {} function imagesetstyle(GdImage $image, array $style): bool {} @@ -187,17 +186,17 @@ function imageopenpolygon(GdImage $image, array $points, int $num_points_or_colo function imagefilledpolygon(GdImage $image, array $points, int $num_points_or_color, ?int $color = null): bool {} -function imagefontwidth(int $font): int {} +function imagefontwidth(GdFont|int $font): int {} -function imagefontheight(int $font): int {} +function imagefontheight(GdFont|int $font): int {} -function imagechar(GdImage $image, int $font, int $x, int $y, string $char, int $color): bool {} +function imagechar(GdImage $image, GdFont|int $font, int $x, int $y, string $char, int $color): bool {} -function imagecharup(GdImage $image, int $font, int $x, int $y, string $char, int $color): bool {} +function imagecharup(GdImage $image, GdFont|int $font, int $x, int $y, string $char, int $color): bool {} -function imagestring(GdImage $image, int $font, int $x, int $y, string $string, int $color): bool {} +function imagestring(GdImage $image, GdFont|int $font, int $x, int $y, string $string, int $color): bool {} -function imagestringup(GdImage $image, int $font, int $x, int $y, string $string, int $color): bool {} +function imagestringup(GdImage $image, GdFont|int $font, int $x, int $y, string $string, int $color): bool {} function imagecopy(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height): bool {} diff --git a/ext/gd/gd_arginfo.h b/ext/gd/gd_arginfo.h index 4d59767b4e..ea61b08374 100644 --- a/ext/gd/gd_arginfo.h +++ b/ext/gd/gd_arginfo.h @@ -1,10 +1,10 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 59256d0de105f1a2f5d5fc1e20f8090031b42a76 */ + * Stub hash: 23b7c8395c628239fb10d746ca6bba72871ee9f3 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gd_info, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_imageloadfont, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_imageloadfont, 0, 1, GdFont, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -380,14 +380,14 @@ ZEND_END_ARG_INFO() #define arginfo_imagefilledpolygon arginfo_imagepolygon ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagefontwidth, 0, 1, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, font, IS_LONG, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, font, GdFont, MAY_BE_LONG, NULL) ZEND_END_ARG_INFO() #define arginfo_imagefontheight arginfo_imagefontwidth ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagechar, 0, 6, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, font, IS_LONG, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, font, GdFont, MAY_BE_LONG, NULL) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, char, IS_STRING, 0) @@ -398,7 +398,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagestring, 0, 6, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, image, GdImage, 0) - ZEND_ARG_TYPE_INFO(0, font, IS_LONG, 0) + ZEND_ARG_OBJ_TYPE_MASK(0, font, GdFont, MAY_BE_LONG, NULL) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) @@ -831,3 +831,8 @@ static const zend_function_entry ext_functions[] = { static const zend_function_entry class_GdImage_methods[] = { ZEND_FE_END }; + + +static const zend_function_entry class_GdFont_methods[] = { + ZEND_FE_END +}; diff --git a/ext/hash/bench.php b/ext/hash/bench.php index 436390f7d5..846163315b 100755 --- a/ext/hash/bench.php +++ b/ext/hash/bench.php @@ -1,81 +1,12 @@ #!/usr/bin/env php <?php -/* - This gives rather interesting results :) +error_reporting(E_ALL); - Measures on a Notebook P4M-1.7 256MB Windows 2000: - sha1 0.556691 - tiger160,3 0.774469 - tiger192,3 0.776314 - tiger128,3 0.777004 - ripemd128 0.896674 - sha256 1.011164 - md5 1.016032 - tiger160,4 1.056617 - tiger128,4 1.063101 - tiger192,4 1.069258 - haval160,3 1.125099 - haval128,3 1.125679 - haval224,3 1.128017 - haval192,3 1.130026 - haval256,3 1.134846 - ripemd160 1.150693 - haval128,4 1.686261 - haval192,4 1.687274 - haval160,4 1.693091 - haval256,4 1.699323 - haval224,4 1.743094 - haval160,5 2.003452 - haval192,5 2.008341 - haval256,5 2.009048 - haval128,5 2.009555 - haval224,5 2.015539 - sha384 3.370734 - sha512 3.381121 - whirlpool 6.912327 - snefru 9.268168 - - Measures on a Desktop P4-2.4 512MB Debian (Linux-2.4): - md5 0.147739 - haval128,3 0.317006 - haval192,3 0.317524 - haval256,3 0.317526 - haval160,3 0.323035 - haval224,3 0.333318 - ripemd128 0.353447 - sha1 0.376200 - ripemd160 0.413758 - sha256 0.435957 - haval160,4 0.452357 - haval224,4 0.454531 - haval128,4 0.458026 - haval256,4 0.459051 - haval192,4 0.468094 - haval128,5 0.524262 - haval160,5 0.529573 - haval224,5 0.533655 - haval256,5 0.534446 - haval192,5 0.543726 - tiger128,3 0.577975 - tiger160,3 0.579951 - tiger192,3 0.597111 - tiger192,4 0.781408 - tiger160,4 0.801243 - tiger128,4 0.812239 - sha512 1.298627 - sha384 1.313607 - whirlpool 1.556159 - snefru 5.703742 - -*/ - -error_reporting(E_ALL&~E_NOTICE); - -$data = file_get_contents(__FILE__); +$data = str_repeat("\x00", (int) ($argv[1] ?? (2 * 1024))); $time = array(); foreach (hash_algos() as $algo) { - $time[$algo] = 0; + $time[$algo] = 0; } for ($j = 0; $j < 10; $j++) { @@ -92,4 +23,3 @@ asort($time, SORT_NUMERIC); foreach ($time as $a => $t) { printf("%-12s %02.6f\n", $a, $t); } -?> diff --git a/ext/hash/config.m4 b/ext/hash/config.m4 index d84e89cc6b..2d6a81b7fe 100644 --- a/ext/hash/config.m4 +++ b/ext/hash/config.m4 @@ -35,11 +35,12 @@ fi EXT_HASH_SOURCES="hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c \ hash_tiger.c hash_gost.c hash_snefru.c hash_whirlpool.c hash_adler32.c \ - hash_crc32.c hash_fnv.c hash_joaat.c $EXT_HASH_SHA3_SOURCES" + hash_crc32.c hash_fnv.c hash_joaat.c $EXT_HASH_SHA3_SOURCES + murmur/PMurHash.c murmur/PMurHash128.c hash_murmur.c" EXT_HASH_HEADERS="php_hash.h php_hash_md.h php_hash_sha.h php_hash_ripemd.h \ php_hash_haval.h php_hash_tiger.h php_hash_gost.h php_hash_snefru.h \ php_hash_whirlpool.h php_hash_adler32.h php_hash_crc32.h \ - php_hash_fnv.h php_hash_joaat.h php_hash_sha3.h" + php_hash_fnv.h php_hash_joaat.h php_hash_sha3.h php_hash_murmur.h" PHP_NEW_EXTENSION(hash, $EXT_HASH_SOURCES, 0,,$PHP_HASH_CFLAGS) PHP_INSTALL_HEADERS(ext/hash, $EXT_HASH_HEADERS) diff --git a/ext/hash/config.w32 b/ext/hash/config.w32 index 5d6be6b922..a0cb3f2477 100644 --- a/ext/hash/config.w32 +++ b/ext/hash/config.w32 @@ -11,7 +11,7 @@ PHP_HASH = 'yes'; EXTENSION('hash', 'hash.c hash_md.c hash_sha.c hash_ripemd.c hash_haval.c ' + 'hash_tiger.c hash_gost.c hash_snefru.c hash_whirlpool.c ' + 'hash_adler32.c hash_crc32.c hash_joaat.c hash_fnv.c ' + - 'hash_sha3.c', false); + 'hash_sha3.c hash_murmur.c', false); var hash_sha3_dir = 'ext/hash/sha3/generic' + (X64 ? '64' : '32') + 'lc'; @@ -28,7 +28,14 @@ if (!CHECK_HEADER_ADD_INCLUDE('KeccakHash.h', 'CFLAGS_HASH', hash_sha3_dir)) { ADD_FLAG('CFLAGS_HASH', '/DKeccakP200_excluded /DKeccakP400_excluded /DKeccakP800_excluded /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1'); +var hash_murmur_dir = 'ext/hash/murmur'; +if (!CHECK_HEADER_ADD_INCLUDE('PMurHash.h', 'CFLAGS_HASH', hash_murmur_dir)) { + ERROR('Unable to locate murmur headers'); +} +ADD_SOURCES(hash_murmur_dir, 'PMurHash.c PMurHash128.c', 'hash'); + PHP_INSTALL_HEADERS('ext/hash/', 'php_hash.h php_hash_md.h php_hash_sha.h ' + 'php_hash_ripemd.h php_hash_haval.h php_hash_tiger.h ' + 'php_hash_gost.h php_hash_snefru.h php_hash_whirlpool.h ' + - 'php_hash_adler32.h php_hash_crc32.h php_hash_sha3.h'); + 'php_hash_adler32.h php_hash_crc32.h php_hash_sha3.h ' + + 'php_hash_murmur.h'); diff --git a/ext/hash/hash.c b/ext/hash/hash.c index 4e3820f35e..f7b851f5a4 100644 --- a/ext/hash/hash.c +++ b/ext/hash/hash.c @@ -52,7 +52,7 @@ struct mhash_bc_entry { int value; }; -#define MHASH_NUM_ALGOS 35 +#define MHASH_NUM_ALGOS 38 static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = { {"CRC32", "crc32", 0}, /* used by bzip */ @@ -90,6 +90,9 @@ static struct mhash_bc_entry mhash_to_hash[MHASH_NUM_ALGOS] = { {"FNV1A64", "fnv1a64", 32}, {"JOAAT", "joaat", 33}, {"CRC32C", "crc32c", 34}, /* Castagnoli's CRC, used by iSCSI, SCTP, Btrfs, ext4, etc */ + {"MURMUR3A", "murmur3a", 35}, + {"MURMUR3C", "murmur3c", 36}, + {"MURMUR3F", "murmur3f", 37}, }; #endif @@ -1586,6 +1589,9 @@ PHP_MINIT_FUNCTION(hash) php_hash_register_algo("fnv164", &php_hash_fnv164_ops); php_hash_register_algo("fnv1a64", &php_hash_fnv1a64_ops); php_hash_register_algo("joaat", &php_hash_joaat_ops); + php_hash_register_algo("murmur3a", &php_hash_murmur3a_ops); + php_hash_register_algo("murmur3c", &php_hash_murmur3c_ops); + php_hash_register_algo("murmur3f", &php_hash_murmur3f_ops); PHP_HASH_HAVAL_REGISTER(3,128); PHP_HASH_HAVAL_REGISTER(3,160); diff --git a/ext/hash/hash_murmur.c b/ext/hash/hash_murmur.c new file mode 100644 index 0000000000..ab01b4f19f --- /dev/null +++ b/ext/hash/hash_murmur.c @@ -0,0 +1,186 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.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. | + +----------------------------------------------------------------------+ + | Author: Anatol Belski <ab@php.net> | + +----------------------------------------------------------------------+ +*/ + +#include "php_hash.h" +#include "php_hash_murmur.h" + +#include "murmur/PMurHash.h" +#include "murmur/PMurHash128.h" + + +const php_hash_ops php_hash_murmur3a_ops = { + "murmur3a", + (php_hash_init_func_t) PHP_MURMUR3AInit, + (php_hash_update_func_t) PHP_MURMUR3AUpdate, + (php_hash_final_func_t) PHP_MURMUR3AFinal, + (php_hash_copy_func_t) PHP_MURMUR3ACopy, + php_hash_serialize, + php_hash_unserialize, + PHP_MURMUR3A_SPEC, + 4, + 4, + sizeof(PHP_MURMUR3A_CTX), + 0 +}; + +PHP_HASH_API void PHP_MURMUR3AInit(PHP_MURMUR3A_CTX *ctx) +{ + ctx->h = 0; + ctx->carry = 0; + ctx->len = 0; +} + +PHP_HASH_API void PHP_MURMUR3AUpdate(PHP_MURMUR3A_CTX *ctx, const unsigned char *in, size_t len) +{ + ctx->len += len; + PMurHash32_Process(&ctx->h, &ctx->carry, in, len); +} + +PHP_HASH_API void PHP_MURMUR3AFinal(unsigned char digest[4], PHP_MURMUR3A_CTX *ctx) +{ + ctx->h = PMurHash32_Result(ctx->h, ctx->carry, ctx->len); + + digest[0] = (unsigned char)((ctx->h >> 24) & 0xff); + digest[1] = (unsigned char)((ctx->h >> 16) & 0xff); + digest[2] = (unsigned char)((ctx->h >> 8) & 0xff); + digest[3] = (unsigned char)(ctx->h & 0xff); +} + +PHP_HASH_API int PHP_MURMUR3ACopy(const php_hash_ops *ops, PHP_MURMUR3A_CTX *orig_context, PHP_MURMUR3A_CTX *copy_context) +{ + copy_context->h = orig_context->h; + copy_context->carry = orig_context->carry; + copy_context->len = orig_context->len; + return SUCCESS; +} + +const php_hash_ops php_hash_murmur3c_ops = { + "murmur3c", + (php_hash_init_func_t) PHP_MURMUR3CInit, + (php_hash_update_func_t) PHP_MURMUR3CUpdate, + (php_hash_final_func_t) PHP_MURMUR3CFinal, + (php_hash_copy_func_t) PHP_MURMUR3CCopy, + php_hash_serialize, + php_hash_unserialize, + PHP_MURMUR3C_SPEC, + 16, + 4, + sizeof(PHP_MURMUR3C_CTX), + 0 +}; + +PHP_HASH_API void PHP_MURMUR3CInit(PHP_MURMUR3C_CTX *ctx) +{ + memset(&ctx->h, 0, sizeof ctx->h); + memset(&ctx->carry, 0, sizeof ctx->carry); + ctx->len = 0; +} + +PHP_HASH_API void PHP_MURMUR3CUpdate(PHP_MURMUR3C_CTX *ctx, const unsigned char *in, size_t len) +{ + ctx->len += len; + PMurHash128x86_Process(ctx->h, ctx->carry, in, len); +} + +PHP_HASH_API void PHP_MURMUR3CFinal(unsigned char digest[4], PHP_MURMUR3C_CTX *ctx) +{ + uint32_t h[4] = {0, 0, 0, 0}; + PMurHash128x86_Result(ctx->h, ctx->carry, ctx->len, h); + + digest[0] = (unsigned char)((h[0] >> 24) & 0xff); + digest[1] = (unsigned char)((h[0] >> 16) & 0xff); + digest[2] = (unsigned char)((h[0] >> 8) & 0xff); + digest[3] = (unsigned char)(h[0] & 0xff); + digest[4] = (unsigned char)((h[1] >> 24) & 0xff); + digest[5] = (unsigned char)((h[1] >> 16) & 0xff); + digest[6] = (unsigned char)((h[1] >> 8) & 0xff); + digest[7] = (unsigned char)(h[1] & 0xff); + digest[8] = (unsigned char)((h[2] >> 24) & 0xff); + digest[9] = (unsigned char)((h[2] >> 16) & 0xff); + digest[10] = (unsigned char)((h[2] >> 8) & 0xff); + digest[11] = (unsigned char)(h[2] & 0xff); + digest[12] = (unsigned char)((h[3] >> 24) & 0xff); + digest[13] = (unsigned char)((h[3] >> 16) & 0xff); + digest[14] = (unsigned char)((h[3] >> 8) & 0xff); + digest[15] = (unsigned char)(h[3] & 0xff); +} + +PHP_HASH_API int PHP_MURMUR3CCopy(const php_hash_ops *ops, PHP_MURMUR3C_CTX *orig_context, PHP_MURMUR3C_CTX *copy_context) +{ + memcpy(©_context->h, &orig_context->h, sizeof orig_context->h); + memcpy(©_context->carry, &orig_context->carry, sizeof orig_context->carry); + copy_context->len = orig_context->len; + return SUCCESS; +} + +const php_hash_ops php_hash_murmur3f_ops = { + "murmur3f", + (php_hash_init_func_t) PHP_MURMUR3FInit, + (php_hash_update_func_t) PHP_MURMUR3FUpdate, + (php_hash_final_func_t) PHP_MURMUR3FFinal, + (php_hash_copy_func_t) PHP_MURMUR3FCopy, + php_hash_serialize, + php_hash_unserialize, + PHP_MURMUR3F_SPEC, + 16, + 8, + sizeof(PHP_MURMUR3F_CTX), + 0 +}; + +PHP_HASH_API void PHP_MURMUR3FInit(PHP_MURMUR3F_CTX *ctx) +{ + memset(&ctx->h, 0, sizeof ctx->h); + memset(&ctx->carry, 0, sizeof ctx->carry); + ctx->len = 0; +} + +PHP_HASH_API void PHP_MURMUR3FUpdate(PHP_MURMUR3F_CTX *ctx, const unsigned char *in, size_t len) +{ + ctx->len += len; + PMurHash128x64_Process(ctx->h, ctx->carry, in, len); +} + +PHP_HASH_API void PHP_MURMUR3FFinal(unsigned char digest[4], PHP_MURMUR3F_CTX *ctx) +{ + uint64_t h[2] = {0, 0}; + PMurHash128x64_Result(ctx->h, ctx->carry, ctx->len, h); + + digest[0] = (unsigned char)((h[0] >> 56) & 0xff); + digest[1] = (unsigned char)((h[0] >> 48) & 0xff); + digest[2] = (unsigned char)((h[0] >> 40) & 0xff); + digest[3] = (unsigned char)((h[0] >> 32) & 0xff); + digest[4] = (unsigned char)((h[0] >> 24) & 0xff); + digest[5] = (unsigned char)((h[0] >> 16) & 0xff); + digest[6] = (unsigned char)((h[0] >> 8) & 0xff); + digest[7] = (unsigned char)(h[0] & 0xff); + digest[8] = (unsigned char)((h[1] >> 56) & 0xff); + digest[9] = (unsigned char)((h[1] >> 48) & 0xff); + digest[10] = (unsigned char)((h[1] >> 40) & 0xff); + digest[11] = (unsigned char)((h[1] >> 32) & 0xff); + digest[12] = (unsigned char)((h[1] >> 24) & 0xff); + digest[13] = (unsigned char)((h[1] >> 16) & 0xff); + digest[14] = (unsigned char)((h[1] >> 8) & 0xff); + digest[15] = (unsigned char)(h[1] & 0xff); +} + +PHP_HASH_API int PHP_MURMUR3FCopy(const php_hash_ops *ops, PHP_MURMUR3F_CTX *orig_context, PHP_MURMUR3F_CTX *copy_context) +{ + memcpy(©_context->h, &orig_context->h, sizeof orig_context->h); + memcpy(©_context->carry, &orig_context->carry, sizeof orig_context->carry); + copy_context->len = orig_context->len; + return SUCCESS; +} diff --git a/ext/hash/murmur/PMurHash.c b/ext/hash/murmur/PMurHash.c new file mode 100644 index 0000000000..0716ca13c8 --- /dev/null +++ b/ext/hash/murmur/PMurHash.c @@ -0,0 +1,226 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This implementation was written by Shane Day, and is also public domain. + * + * This is a portable ANSI C implementation of MurmurHash3_x86_32 (Murmur3A) + * with support for progressive processing. + */ + +/*----------------------------------------------------------------------------- + +If you want to understand the MurmurHash algorithm you would be much better +off reading the original source. Just point your browser at: +http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp + + +What this version provides? + +1. Progressive data feeding. Useful when the entire payload to be hashed +does not fit in memory or when the data is streamed through the application. +Also useful when hashing a number of strings with a common prefix. A partial +hash of a prefix string can be generated and reused for each suffix string. + +How does it work? + +We can only process entire 32 bit chunks of input, except for the very end +that may be shorter. So along with the partial hash we need to give back to +the caller a carry containing up to 3 bytes that we were unable to process. +This carry also needs to record the number of bytes the carry holds. I use +the low 2 bits as a count (0..3) and the carry bytes are shifted into the +high byte in stream order. + +To handle endianess I simply use a macro that reads a uint32_t and define +that macro to be a direct read on little endian machines, a read and swap +on big endian machines, or a byte-by-byte read if the endianess is unknown. + +-----------------------------------------------------------------------------*/ + + +#include "PMurHash.h" + +// /* MSVC warnings we choose to ignore */ +// #if defined(_MSC_VER) +// #pragma warning(disable: 4127) /* conditional expression is constant */ +// #endif + +/*----------------------------------------------------------------------------- + * Endianess, misalignment capabilities and util macros + * + * The following 3 macros are defined in this section. The other macros defined + * are only needed to help derive these 3. + * + * READ_UINT32(x) Read a little endian unsigned 32-bit int + * UNALIGNED_SAFE Defined if READ_UINT32 works on non-word boundaries + * ROTL32(x,r) Rotate x left by r bits + */ + +/* I386 or AMD64 */ +#if defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__i386__) || defined(__i386) || defined(i386) \ + || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) + #define UNALIGNED_SAFE +#endif +/* I386 or AMD64 */ +#if defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__i386__) || defined(__i386) || defined(i386) \ + || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) + #define UNALIGNED_SAFE +#endif + +/* Find best way to ROTL */ +#if defined(_MSC_VER) + #define FORCE_INLINE static __forceinline + #include <stdlib.h> /* Microsoft put _rotl declaration in here */ + #define ROTL32(x,y) _rotl(x,y) +#else + #define FORCE_INLINE static inline __attribute__((always_inline)) + /* gcc recognises this code and generates a rotate instruction for CPUs with one */ + #define ROTL32(x,r) (((uint32_t)x << r) | ((uint32_t)x >> (32 - r))) +#endif + +#include "endianness.h" + +#define READ_UINT32(ptr) getblock32((uint32_t *)ptr, 0) + +/*----------------------------------------------------------------------------- + * Core murmurhash algorithm macros */ + +static const uint32_t kC1 = 0xcc9e2d51; +static const uint32_t kC2 = 0x1b873593; + +/* This is the main processing body of the algorithm. It operates + * on each full 32-bits of input. */ +#define doblock(h1, k1) \ +do {\ + k1 *= kC1;\ + k1 = ROTL32(k1,15);\ + k1 *= kC2;\ +\ + h1 ^= k1;\ + h1 = ROTL32(h1,13);\ + h1 = h1*5+0xe6546b64;\ +} while(0) + +/* Append unaligned bytes to carry, forcing hash churn if we have 4 bytes */ +/* cnt=bytes to process, h1=name of h1 var, c=carry, n=bytes in c, ptr/len=payload */ +#define dobytes(cnt, h1, c, n, ptr, len) \ +do {\ + unsigned __cnt = cnt;\ + while(__cnt--) {\ + c = c>>8 | (uint32_t)*ptr++<<24;\ + n++; len--;\ + if(n==4) {\ + doblock(h1, c);\ + n = 0;\ + }\ + }\ +} while(0) + +/*---------------------------------------------------------------------------*/ + +/* Main hashing function. Initialise carry to 0 and h1 to 0 or an initial seed + * if wanted. Both ph1 and pcarry are required arguments. */ +void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int len) +{ + uint32_t h1 = *ph1; + uint32_t c = *pcarry; + + const uint8_t *ptr = (uint8_t*)key; + const uint8_t *end; + + /* Extract carry count from low 2 bits of c value */ + int n = c & 3; + +#if defined(UNALIGNED_SAFE) + /* This CPU handles unaligned word access */ +// #pragma message ( "UNALIGNED_SAFE" ) + /* Consume any carry bytes */ + int i = (4-n) & 3; + if(i && i <= len) { + dobytes(i, h1, c, n, ptr, len); + } + + /* Process 32-bit chunks */ + end = ptr + (len & ~3); + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = READ_UINT32(ptr); + doblock(h1, k1); + } + +#else /*UNALIGNED_SAFE*/ + /* This CPU does not handle unaligned word access */ +// #pragma message ( "ALIGNED" ) + /* Consume enough so that the next data byte is word aligned */ + int i = -(intptr_t)(void *)ptr & 3; + if(i && i <= len) { + dobytes(i, h1, c, n, ptr, len); + } + + /* We're now aligned. Process in aligned blocks. Specialise for each possible carry count */ + end = ptr + (len & ~3); + switch(n) { /* how many bytes in c */ + case 0: /* c=[----] w=[3210] b=[3210]=w c'=[----] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = READ_UINT32(ptr); + doblock(h1, k1); + } + break; + case 1: /* c=[0---] w=[4321] b=[3210]=c>>24|w<<8 c'=[4---] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = c>>24; + c = READ_UINT32(ptr); + k1 |= c<<8; + doblock(h1, k1); + } + break; + case 2: /* c=[10--] w=[5432] b=[3210]=c>>16|w<<16 c'=[54--] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = c>>16; + c = READ_UINT32(ptr); + k1 |= c<<16; + doblock(h1, k1); + } + break; + case 3: /* c=[210-] w=[6543] b=[3210]=c>>8|w<<24 c'=[654-] */ + for( ; ptr < end ; ptr+=4) { + uint32_t k1 = c>>8; + c = READ_UINT32(ptr); + k1 |= c<<24; + doblock(h1, k1); + } + } +#endif /*UNALIGNED_SAFE*/ + + /* Advance over whole 32-bit chunks, possibly leaving 1..3 bytes */ + len -= len & ~3; + + /* Append any remaining bytes into carry */ + dobytes(len, h1, c, n, ptr, len); + + /* Copy out new running hash and carry */ + *ph1 = h1; + *pcarry = (c & ~0xff) | n; +} + +/*---------------------------------------------------------------------------*/ + +/* Finalize a hash. To match the original Murmur3A the total_length must be provided */ +uint32_t PMurHash32_Result(uint32_t h, uint32_t carry, uint32_t total_length) +{ + uint32_t k1; + int n = carry & 3; + if(n) { + k1 = carry >> (4-n)*8; + k1 *= kC1; k1 = ROTL32(k1,15); k1 *= kC2; h ^= k1; + } + h ^= total_length; + + /* fmix */ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; +} diff --git a/ext/hash/murmur/PMurHash.h b/ext/hash/murmur/PMurHash.h new file mode 100644 index 0000000000..f80eb11f40 --- /dev/null +++ b/ext/hash/murmur/PMurHash.h @@ -0,0 +1,31 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This implementation was written by Shane Day, and is also public domain. + * + * This implementation was modified to match PMurHash128.cpp. + */ + +/* ------------------------------------------------------------------------- */ + +// Microsoft Visual Studio + +#if defined(_MSC_VER) && (_MSC_VER < 1600) + +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; + +// Other compilers + +#else // defined(_MSC_VER) + +#include <stdint.h> + +#endif // !defined(_MSC_VER) + +/* ------------------------------------------------------------------------- */ +/* Prototypes */ + +void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int len); +uint32_t PMurHash32_Result(uint32_t h1, uint32_t carry, uint32_t total_length); diff --git a/ext/hash/murmur/PMurHash128.c b/ext/hash/murmur/PMurHash128.c new file mode 100644 index 0000000000..2856542190 --- /dev/null +++ b/ext/hash/murmur/PMurHash128.c @@ -0,0 +1,640 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This is a c++ implementation of MurmurHash3_128 with support for progressive + * processing based on PMurHash implementation written by Shane Day. + */ + +/*----------------------------------------------------------------------------- + +If you want to understand the MurmurHash algorithm you would be much better +off reading the original source. Just point your browser at: +http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp + + +What this version provides? + +1. Progressive data feeding. Useful when the entire payload to be hashed +does not fit in memory or when the data is streamed through the application. +Also useful when hashing a number of strings with a common prefix. A partial +hash of a prefix string can be generated and reused for each suffix string. + +How does it work? + +We can only process entire 128 bit chunks of input, except for the very end +that may be shorter. So along with the partial hash we need to give back to +the caller a carry containing up to 15 bytes that we were unable to process. +This carry also needs to record the number of bytes the carry holds. I use +the low 4 bits as a count (0..15) and the carry bytes are shifted into the +high byte in stream order. + +To handle endianess I simply use a macro that reads an uint and define +that macro to be a direct read on little endian machines, a read and swap +on big endian machines. + +-----------------------------------------------------------------------------*/ + + +#include "PMurHash128.h" + +/*----------------------------------------------------------------------------- + * Endianess, misalignment capabilities and util macros + * + * The following 5 macros are defined in this section. The other macros defined + * are only needed to help derive these 5. + * + * READ_UINT32(x,i) Read a little endian unsigned 32-bit int at index + * READ_UINT64(x,i) Read a little endian unsigned 64-bit int at index + * UNALIGNED_SAFE Defined if READ_UINTXX works on non-word boundaries + * ROTL32(x,r) Rotate x left by r bits + * ROTL64(x,r) Rotate x left by r bits + * BIG_CONSTANT + * FORCE_INLINE + */ + +/* I386 or AMD64 */ +#if defined(_M_I86) || defined(_M_IX86) || defined(_X86_) || defined(__i386__) || defined(__i386) || defined(i386) \ + || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) || defined(__amd64) + #define UNALIGNED_SAFE +#endif + +/* Find best way to ROTL */ +#if defined(_MSC_VER) + #define FORCE_INLINE static __forceinline + #include <stdlib.h> /* Microsoft put _rotl declaration in here */ + #define ROTL32(x,y) _rotl(x,y) + #define ROTL64(x,y) _rotl64(x,y) + #define BIG_CONSTANT(x) (x) +#else + #define FORCE_INLINE static inline __attribute__((always_inline)) + /* gcc recognises this code and generates a rotate instruction for CPUs with one */ + #define ROTL32(x,r) (((uint32_t)x << r) | ((uint32_t)x >> (32 - r))) + #define ROTL64(x,r) (((uint64_t)x << r) | ((uint64_t)x >> (64 - r))) + #define BIG_CONSTANT(x) (x##LLU) +#endif + +#include "endianness.h" + +#define READ_UINT64(ptr,i) getblock64((uint64_t *)ptr,i) +#define READ_UINT32(ptr,i) getblock32((uint32_t *)ptr,i) + +//----------------------------------------------------------------------------- +// Finalization mix - force all bits of a hash block to avalanche + +FORCE_INLINE uint32_t fmix32 ( uint32_t h ) +{ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; +} + +//---------- + +FORCE_INLINE uint64_t fmix64 ( uint64_t k ) +{ + k ^= k >> 33; + k *= BIG_CONSTANT(0xff51afd7ed558ccd); + k ^= k >> 33; + k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53); + k ^= k >> 33; + + return k; +} + +/*-----------------------------------------------------------------------------* + PMurHash128x86 + *-----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------- + * Core murmurhash algorithm macros */ + +static const uint32_t kC1 = 0x239b961b; +static const uint32_t kC2 = 0xab0e9789; +static const uint32_t kC3 = 0x38b34ae5; +static const uint32_t kC4 = 0xa1e38b93; + +/* This is the main processing body of the algorithm. It operates + * on each full 128-bits of input. */ +#define doblock128x86(h1, h2, h3, h4, k1, k2, k3,k4)\ +do {\ + k1 *= kC1; k1 = ROTL32(k1,15); k1 *= kC2; h1 ^= k1;\ +\ + h1 = ROTL32(h1,19); h1 += h2; h1 = h1*5+0x561ccd1b;\ +\ + k2 *= kC2; k2 = ROTL32(k2,16); k2 *= kC3; h2 ^= k2;\ +\ + h2 = ROTL32(h2,17); h2 += h3; h2 = h2*5+0x0bcaa747;\ +\ + k3 *= kC3; k3 = ROTL32(k3,17); k3 *= kC4; h3 ^= k3;\ +\ + h3 = ROTL32(h3,15); h3 += h4; h3 = h3*5+0x96cd1c35;\ +\ + k4 *= kC4; k4 = ROTL32(k4,18); k4 *= kC1; h4 ^= k4;\ +\ + h4 = ROTL32(h4,13); h4 += h1; h4 = h4*5+0x32ac3b17;\ +} while(0) + +/* Append unaligned bytes to carry, forcing hash churn if we have 16 bytes */ +/* cnt=bytes to process, h1-h4=hash k1-k4=carry, n=bytes in carry, ptr/len=payload */ +#define dobytes128x86(cnt, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len)\ +do {\ + unsigned __cnt = cnt;\ + for(;__cnt--; len--) {\ + switch(n) {\ + case 0: case 1: case 2: case 3:\ + k1 = k1>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 4: case 5: case 6: case 7:\ + k2 = k2>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 8: case 9: case 10: case 11:\ + k3 = k3>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 12: case 13: case 14:\ + k4 = k4>>8 | (uint32_t)*ptr++<<24;\ + ++n; break;\ +\ + case 15:\ + k4 = k4>>8 | (uint32_t)*ptr++<<24;\ + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4);\ + n = 0; break;\ + }\ + }\ +} while(0) + +/* Finalize a hash. To match the original Murmur3_128x86 the total_length must be provided */ +void PMurHash128x86_Result(const uint32_t *ph, const uint32_t *pcarry, uint32_t total_length, uint32_t *out) +{ + uint32_t h1 = ph[0]; + uint32_t h2 = ph[1]; + uint32_t h3 = ph[2]; + uint32_t h4 = ph[3]; + + uint32_t k1, k2, k3, k4 = pcarry[3]; + + int n = k4 & 15; + switch(n) { + case 1: case 2: case 3: case 4: + k1 = pcarry[0] >> (4-n)*8; + goto finrot_k1; + + case 5: case 6: case 7: case 8: + k2 = pcarry[1] >> (8-n)*8; + goto finrot_k21; + + case 9: case 10: case 11: case 12: + k3 = pcarry[2] >> (12-n)*8; + goto finrot_k321; + + case 13: case 14: case 15: + k4 >>= (16-n)*8; + goto finrot_k4321; + + default: + goto skiprot; + } +finrot_k4321: + k4 *= kC4; k4 = ROTL32(k4,18); k4 *= kC1; h4 ^= k4; + k3 = pcarry[2]; +finrot_k321: + k3 *= kC3; k3 = ROTL32(k3,17); k3 *= kC4; h3 ^= k3; + k2 = pcarry[1]; +finrot_k21: + k2 *= kC2; k2 = ROTL32(k2,16); k2 *= kC3; h2 ^= k2; + k1 = pcarry[0]; +finrot_k1: + k1 *= kC1; k1 = ROTL32(k1,15); k1 *= kC2; h1 ^= k1; +skiprot: + + //---------- + // finalization + + h1 ^= total_length; h2 ^= total_length; + h3 ^= total_length; h4 ^= total_length; + + h1 += h2; h1 += h3; h1 += h4; + h2 += h1; h3 += h1; h4 += h1; + + h1 = fmix32(h1); + h2 = fmix32(h2); + h3 = fmix32(h3); + h4 = fmix32(h4); + + h1 += h2; h1 += h3; h1 += h4; + h2 += h1; h3 += h1; h4 += h1; + + out[0] = h1; + out[1] = h2; + out[2] = h3; + out[3] = h4; +} + +/*---------------------------------------------------------------------------*/ + +/* Main hashing function. Initialise carry[4] to {0,0,0,0} and h[4] to an initial {seed,seed,seed,seed} + * if wanted. Both ph and pcarry are required arguments. */ +void PMurHash128x86_Process(uint32_t * const ph, uint32_t * const pcarry, const void * const key, int len) +{ + uint32_t h1 = ph[0]; + uint32_t h2 = ph[1]; + uint32_t h3 = ph[2]; + uint32_t h4 = ph[3]; + + uint32_t k1 = pcarry[0]; + uint32_t k2 = pcarry[1]; + uint32_t k3 = pcarry[2]; + uint32_t k4 = pcarry[3]; + + const uint8_t *ptr = (uint8_t*)key; + const uint8_t *end; + + /* Extract carry count from low 4 bits of c value */ + int n = k4 & 15; + +#if defined(UNALIGNED_SAFE) + /* This CPU handles unaligned word access */ +// #pragma message ( "UNALIGNED_SAFE" ) + /* Consume any carry bytes */ + int i = (16-n) & 15; + if(i && i <= len) { + dobytes128x86(i, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len); + } + + /* Process 128-bit chunks */ + end = ptr + (len & ~15); + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT32(ptr, 0); + k2 = READ_UINT32(ptr, 1); + k3 = READ_UINT32(ptr, 2); + k4 = READ_UINT32(ptr, 3); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + } + +#else /*UNALIGNED_SAFE*/ + /* This CPU does not handle unaligned word access */ +// #pragma message ( "ALIGNED" ) + /* Consume enough so that the next data byte is word aligned */ + int i = -(intptr_t)(void *)ptr & 3; + if(i && i <= len) { + dobytes128x86(i, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len); + } + /* We're now aligned. Process in aligned blocks. Specialise for each possible carry count */ + end = ptr + (len & ~15); + + switch(n) { /* how many bytes in c */ + case 0: /* + k1=[----] k2=[----] k2=[----] k4=[----] w=[3210 7654 ba98 fedc] b=[3210 7654 ba98 fedc] */ + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT32(ptr, 0); + k2 = READ_UINT32(ptr, 1); + k3 = READ_UINT32(ptr, 2); + k4 = READ_UINT32(ptr, 3); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + } + break; + case 1: case 2: case 3: /* + k1=[10--] k2=[----] k3=[----] k4=[----] w=[5432 9876 dcba hgfe] b=[3210 7654 ba98 fedc] k1'=[hg--] */ + { + const int lshift = n*8, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k1>>rshift; // --10 + k2 = READ_UINT32(ptr, 0); // 5432 + c |= k2<<lshift; // 3210. + k1 = READ_UINT32(ptr, 1); // 9876 + k2 = k1<<lshift | k2>>rshift; // 7654. + k4 = READ_UINT32(ptr, 2); // dcba + k3 = k4<<lshift | k1>>rshift; // ba98. + k1 = READ_UINT32(ptr, 3); // hgfe. + k4 = k1<<lshift | k4>>rshift; // fedc. + doblock128x86(h1, h2, h3, h4, c, k2, k3, k4); + } + } + break; + case 4: /* + k1=[3210] k2=[----] k3=[----] k4=[----] w=[7654 ba98 fedc jihg] b=[3210 7654 ba98 fedc] k1'=[jihg] */ + for( ; ptr < end ; ptr+=16) { + k2 = READ_UINT32(ptr, 0); + k3 = READ_UINT32(ptr, 1); + k4 = READ_UINT32(ptr, 2); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + k1 = READ_UINT32(ptr, 3); + } + break; + case 5: case 6: case 7: /* + k1=[3210] k2=[54--] k3=[----] k4=[----] w=[9876 dcba hgfe lkji] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[lk--] */ + { + const int lshift = n*8-32, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k2>>rshift; // --54 + k3 = READ_UINT32(ptr, 0); // 9876 + c |= k3<<lshift; // 7654. + k4 = READ_UINT32(ptr, 1); // dcba + k3 = k4<<lshift | k3>>rshift; // ba98. + k2 = READ_UINT32(ptr, 2); // hgfe + k4 = k2<<lshift | k4>>rshift; // fedc. + doblock128x86(h1, h2, h3, h4, k1, c, k3, k4); + k1 = k2>>rshift; // --hg + k2 = READ_UINT32(ptr, 3); // lkji. + k1 |= k2<<lshift; // jihg. + } + } + case 8: /* + k1=[3210] k2=[7654] k3=[----] k4=[----] w=[ba98 fedc jihg nmlk] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[nmlk] */ + for( ; ptr < end ; ptr+=16) { + k3 = READ_UINT32(ptr, 0); + k4 = READ_UINT32(ptr, 1); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + k1 = READ_UINT32(ptr, 2); + k2 = READ_UINT32(ptr, 3); + } + break; + case 9: case 10: case 11: /* + k1=[3210] k2=[7654] k3=[98--] k4=[----] w=[dcba hgfe lkji ponm] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[nmlk] k3'=[po--] */ + { + const int lshift = n*8-64, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k3>>rshift; // --98 + k4 = READ_UINT32(ptr, 0); // dcba + c |= k4<<lshift; // ba98. + k3 = READ_UINT32(ptr, 1); // hgfe + k4 = k3<<lshift | k4>>rshift; // fedc. + doblock128x86(h1, h2, h3, h4, k1, k2, c, k4); + k2 = READ_UINT32(ptr, 2); // lkji + k1 = k2<<lshift | k3>>rshift; // jihg. + k3 = READ_UINT32(ptr, 3); // ponm. + k2 = k3<<lshift | k2>>rshift; // nmlk. + } + } + case 12: /* + k1=[3210] k2=[7654] k3=[ba98] k4=[----] w=[fedc jihg nmlk rqpo] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[nmlk] k3'=[rqpo] */ + for( ; ptr < end ; ptr+=16) { + k4 = READ_UINT32(ptr, 0); + doblock128x86(h1, h2, h3, h4, k1, k2, k3, k4); + k1 = READ_UINT32(ptr, 1); + k2 = READ_UINT32(ptr, 2); + k3 = READ_UINT32(ptr, 3); + } + break; + default: /* 12 < n <= 15 + k1=[3210] k2=[7654] k3=[ba98] k4=[dc--] w=[hgfe lkji ponm tsrq] b=[3210 7654 ba98 fedc] k1'=[jihg] k2'=[nmlk] k3'=[rqpo] k3'=[ts--] */ + { + const int lshift = n*8-96, rshift = 32-lshift; + for( ; ptr < end ; ptr+=16) { + uint32_t c = k4>>rshift; // --dc + k4 = READ_UINT32(ptr, 0); // hgfe + c |= k4<<lshift; // fedc. + doblock128x86(h1, h2, h3, h4, k1, k2, k3, c); + k3 = READ_UINT32(ptr, 1); // lkji + k1 = k3<<lshift | k4>>rshift; // jihg. + c = READ_UINT32(ptr, 2); // ponm + k2 = c<<lshift | k3>>rshift; // nmlk. + k4 = READ_UINT32(ptr, 3); // tsrq. + k3 = k4<<lshift | c>>rshift; // rqpo. + } + } + } +#endif /*UNALIGNED_SAFE*/ + + /* Advance over whole 128-bit chunks, possibly leaving 1..15 bytes */ + len -= len & ~15; + + /* Append any remaining bytes into carry */ + dobytes128x86(len, h1, h2, h3, h4, k1, k2, k3, k4, n, ptr, len); + + /* Copy out new running hash and carry */ + ph[0] = h1; + ph[1] = h2; + ph[2] = h3; + ph[3] = h4; + pcarry[0] = k1; + pcarry[1] = k2; + pcarry[2] = k3; + pcarry[3] = (k4 & ~0xff) | n; +} + +/*---------------------------------------------------------------------------*/ + +/* All in one go */ + +/* MurmurHash3_x86_128 api */ +void PMurHash128x86(const void * key, const int len, uint32_t seed, void * out) +{ + uint32_t carry[4] = {0, 0, 0, 0}; + uint32_t h[4] = {seed, seed, seed, seed}; + PMurHash128x86_Process(h, carry, key, len); + PMurHash128x86_Result(h, carry, (uint32_t) len, (uint32_t *) out); +} + +/*-----------------------------------------------------------------------------* + PMurHash128x64 + *-----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------- + * Core murmurhash algorithm macros */ + +static const uint64_t kC1L = BIG_CONSTANT(0x87c37b91114253d5); +static const uint64_t kC2L = BIG_CONSTANT(0x4cf5ad432745937f); + +/* This is the main processing body of the algorithm. It operates + * on each full 128-bits of input. */ +#define doblock128x64(h1, h2, k1, k2)\ +do {\ + k1 *= kC1L; k1 = ROTL64(k1,31); k1 *= kC2L; h1 ^= k1;\ +\ + h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;\ +\ + k2 *= kC2L; k2 = ROTL64(k2,33); k2 *= kC1L; h2 ^= k2;\ +\ + h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;\ +} while(0) + +/* Append unaligned bytes to carry, forcing hash churn if we have 16 bytes */ +/* cnt=bytes to process, h1,h2=hash k1,k2=carry, n=bytes in carry, ptr/len=payload */ +#define dobytes128x64(cnt, h1, h2, k1, k2, n, ptr, len) \ +do {\ + unsigned __cnt = cnt;\ + for(;__cnt--; len--) {\ + switch(n) {\ + case 0: case 1: case 2: case 3:\ + case 4: case 5: case 6: case 7:\ + k1 = k1>>8 | (uint64_t)*ptr++<<56;\ + n++; break;\ +\ + case 8: case 9: case 10: case 11:\ + case 12: case 13: case 14:\ + k2 = k2>>8 | (uint64_t)*ptr++<<56;\ + n++; break;\ +\ + case 15:\ + k2 = k2>>8 | (uint64_t)*ptr++<<56;\ + doblock128x64(h1, h2, k1, k2);\ + n = 0; break;\ + }\ + }\ +} while(0) + +/* Finalize a hash. To match the original Murmur3_128x64 the total_length must be provided */ +void PMurHash128x64_Result(const uint64_t * const ph, const uint64_t * const pcarry, + const uint32_t total_length, uint64_t * const out) +{ + uint64_t h1 = ph[0]; + uint64_t h2 = ph[1]; + + uint64_t k1; + uint64_t k2 = pcarry[1]; + + int n = k2 & 15; + if (n) { + k1 = pcarry[0]; + if (n > 8) { + k2 >>= (16-n)*8; + k2 *= kC2L; k2 = ROTL64(k2,33); k2 *= kC1L; h2 ^= k2; + } else { + k1 >>= (8-n)*8; + } + k1 *= kC1L; k1 = ROTL64(k1,31); k1 *= kC2L; h1 ^= k1; + } + + //---------- + // finalization + + h1 ^= total_length; h2 ^= total_length; + + h1 += h2; + h2 += h1; + + h1 = fmix64(h1); + h2 = fmix64(h2); + + h1 += h2; + h2 += h1; + + out[0] = h1; + out[1] = h2; +} + +/*---------------------------------------------------------------------------*/ + +/* Main hashing function. Initialise carry[2] to {0,0} and h[2] to an initial {seed,seed} + * if wanted. Both ph and pcarry are required arguments. */ +void PMurHash128x64_Process(uint64_t * const ph, uint64_t * const pcarry, const void * const key, int len) +{ + uint64_t h1 = ph[0]; + uint64_t h2 = ph[1]; + + uint64_t k1 = pcarry[0]; + uint64_t k2 = pcarry[1]; + + const uint8_t *ptr = (uint8_t*)key; + const uint8_t *end; + + /* Extract carry count from low 4 bits of c value */ + int n = k2 & 15; + +#if defined(UNALIGNED_SAFE) + /* This CPU handles unaligned word access */ +// #pragma message ( "UNALIGNED_SAFE" ) + /* Consume any carry bytes */ + int i = (16-n) & 15; + if(i && i <= len) { + dobytes128x64(i, h1, h2, k1, k2, n, ptr, len); + } + + /* Process 128-bit chunks */ + end = ptr + (len & ~15); + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT64(ptr, 0); + k2 = READ_UINT64(ptr, 1); + doblock128x64(h1, h2, k1, k2); + } + +#else /*UNALIGNED_SAFE*/ + /* This CPU does not handle unaligned word access */ +// #pragma message ( "ALIGNED" ) + /* Consume enough so that the next data byte is word aligned */ + int i = -(intptr_t)(void *)ptr & 7; + if(i && i <= len) { + dobytes128x64(i, h1, h2, k1, k2, n, ptr, len); + } + /* We're now aligned. Process in aligned blocks. Specialise for each possible carry count */ + end = ptr + (len & ~15); + + switch(n) { /* how many bytes in c */ + case 0: /* + k1=[--------] k2=[--------] w=[76543210 fedcba98] b=[76543210 fedcba98] */ + for( ; ptr < end ; ptr+=16) { + k1 = READ_UINT64(ptr, 0); + k2 = READ_UINT64(ptr, 1); + doblock128x64(h1, h2, k1, k2); + } + break; + case 1: case 2: case 3: case 4: case 5: case 6: case 7: /* + k1=[10------] k2=[--------] w=[98765432 hgfedcba] b=[76543210 fedcba98] k1'=[hg------] */ + { + const int lshift = n*8, rshift = 64-lshift; + for( ; ptr < end ; ptr+=16) { + uint64_t c = k1>>rshift; + k2 = READ_UINT64(ptr, 0); + c |= k2<<lshift; + k1 = READ_UINT64(ptr, 1); + k2 = k2>>rshift | k1<<lshift; + doblock128x64(h1, h2, c, k2); + } + } + break; + case 8: /* + k1=[76543210] k2=[--------] w=[fedcba98 nmlkjihg] b=[76543210 fedcba98] k1`=[nmlkjihg] */ + for( ; ptr < end ; ptr+=16) { + k2 = READ_UINT64(ptr, 0); + doblock128x64(h1, h2, k1, k2); + k1 = READ_UINT64(ptr, 1); + } + break; + default: /* 8 < n <= 15 + k1=[76543210] k2=[98------] w=[hgfedcba ponmlkji] b=[76543210 fedcba98] k1`=[nmlkjihg] k2`=[po------] */ + { + const int lshift = n*8-64, rshift = 64-lshift; + for( ; ptr < end ; ptr+=16) { + uint64_t c = k2 >> rshift; + k2 = READ_UINT64(ptr, 0); + c |= k2 << lshift; + doblock128x64(h1, h2, k1, c); + k1 = k2 >> rshift; + k2 = READ_UINT64(ptr, 1); + k1 |= k2 << lshift; + } + } + } +#endif /*UNALIGNED_SAFE*/ + + /* Advance over whole 128-bit chunks, possibly leaving 1..15 bytes */ + len -= len & ~15; + + /* Append any remaining bytes into carry */ + dobytes128x64(len, h1, h2, k1, k2, n, ptr, len); + + /* Copy out new running hash and carry */ + ph[0] = h1; + ph[1] = h2; + pcarry[0] = k1; + pcarry[1] = (k2 & ~0xff) | n; +} + +/*---------------------------------------------------------------------------*/ + +/* All in one go */ + +/* MurmurHash3_x64_128 api */ +void PMurHash128x64(const void * key, const int len, uint32_t seed, void * out) +{ + uint64_t carry[2] = {0, 0}; + uint64_t h[2] = {seed, seed}; + PMurHash128x64_Process(h, carry, key, len); + PMurHash128x64_Result(h, carry, (uint32_t) len, (uint64_t *) out); +} diff --git a/ext/hash/murmur/PMurHash128.h b/ext/hash/murmur/PMurHash128.h new file mode 100644 index 0000000000..0d372ff355 --- /dev/null +++ b/ext/hash/murmur/PMurHash128.h @@ -0,0 +1,39 @@ +/*----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. + * + * This is a c++ implementation of MurmurHash3_128 with support for progressive + * processing based on PMurHash implementation written by Shane Day. + */ + +/* ------------------------------------------------------------------------- */ + +// Microsoft Visual Studio + +#if defined(_MSC_VER) && (_MSC_VER < 1600) + +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; +typedef unsigned __int64 uint64_t; + +// Other compilers + +#else // defined(_MSC_VER) + +#include <stdint.h> + +#endif // !defined(_MSC_VER) + +/* ------------------------------------------------------------------------- */ +/* Formal prototypes */ + +// PMurHash128x64 +void PMurHash128x64_Process(uint64_t ph[2], uint64_t pcarry[2], const void *key, int len); +void PMurHash128x64_Result(const uint64_t ph[2], const uint64_t pcarry[2], uint32_t total_length, uint64_t out[2]); +void PMurHash128x64(const void * key, const int len, uint32_t seed, void * out); + +// PMurHash128x86 +void PMurHash128x86_Process(uint32_t ph[4], uint32_t pcarry[4], const void *key, int len); +void PMurHash128x86_Result(const uint32_t ph[4], const uint32_t pcarry[4], uint32_t total_length, uint32_t out[4]); +void PMurHash128x86(const void * key, const int len, uint32_t seed, void * out); + diff --git a/ext/hash/murmur/endianness.h b/ext/hash/murmur/endianness.h new file mode 100644 index 0000000000..3dbb2e6a3d --- /dev/null +++ b/ext/hash/murmur/endianness.h @@ -0,0 +1,84 @@ +static const union { + uint8_t u8[2]; + uint16_t u16; +} EndianMix = {{ 1, 0 }}; +FORCE_INLINE int IsBigEndian() +{ + // Constant-folded by the compiler. + return EndianMix.u16 != 1; +} + +#if defined(_MSC_VER) +# include <stdlib.h> +# define BSWAP32(u) _byteswap_ulong(u) +# define BSWAP64(u) _byteswap_uint64(u) +#else +# ifdef __has_builtin +# if __has_builtin(__builtin_bswap32) +# define BSWAP32(u) __builtin_bswap32(u) +# endif // __has_builtin(__builtin_bswap32) +# if __has_builtin(__builtin_bswap64) +# define BSWAP64(u) __builtin_bswap64(u) +# endif // __has_builtin(__builtin_bswap64) +# elif defined(__GNUC__) && ( \ + __GNUC__ > 4 || ( \ + __GNUC__ == 4 && ( \ + __GNUC_MINOR__ >= 3 \ + ) \ + ) \ + ) +# define BSWAP32(u) __builtin_bswap32(u) +# define BSWAP64(u) __builtin_bswap64(u) +# endif // __has_builtin +#endif // defined(_MSC_VER) + +#ifndef BSWAP32 +FORCE_INLINE uint32_t BSWAP32(uint32_t u) +{ + return (((u & 0xff000000) >> 24) + | ((u & 0x00ff0000) >> 8) + | ((u & 0x0000ff00) << 8) + | ((u & 0x000000ff) << 24)); +} +#endif +#ifndef BSWAP64 +FORCE_INLINE uint64_t BSWAP64(uint64_t u) +{ + return (((u & 0xff00000000000000ULL) >> 56) + | ((u & 0x00ff000000000000ULL) >> 40) + | ((u & 0x0000ff0000000000ULL) >> 24) + | ((u & 0x000000ff00000000ULL) >> 8) + | ((u & 0x00000000ff000000ULL) << 8) + | ((u & 0x0000000000ff0000ULL) << 24) + | ((u & 0x000000000000ff00ULL) << 40) + | ((u & 0x00000000000000ffULL) << 56)); +} +#endif + +#if defined(__clang__) || defined(__GNUC__) && __GNUC__ >= 8 +# define NO_SANITIZE_ALIGNMENT __attribute__((no_sanitize("alignment"))) +#else +# define NO_SANITIZE_ALIGNMENT +#endif + +NO_SANITIZE_ALIGNMENT +FORCE_INLINE uint32_t getblock32 ( const uint32_t * const p, const int i) +{ + if (IsBigEndian()) { + return BSWAP32(p[i]); + } else { + return p[i]; + } +} + +NO_SANITIZE_ALIGNMENT +FORCE_INLINE uint64_t getblock64 ( const uint64_t * const p, const int i) +{ + if (IsBigEndian()) { + return BSWAP64(p[i]); + } else { + return p[i]; + } +} + +#undef NO_SANITIZE_ALIGNMENT diff --git a/ext/hash/php_hash.h b/ext/hash/php_hash.h index 33cc6a473a..69d1330072 100644 --- a/ext/hash/php_hash.h +++ b/ext/hash/php_hash.h @@ -105,6 +105,9 @@ extern const php_hash_ops php_hash_fnv1a32_ops; extern const php_hash_ops php_hash_fnv164_ops; extern const php_hash_ops php_hash_fnv1a64_ops; extern const php_hash_ops php_hash_joaat_ops; +extern const php_hash_ops php_hash_murmur3a_ops; +extern const php_hash_ops php_hash_murmur3c_ops; +extern const php_hash_ops php_hash_murmur3f_ops; #define PHP_HASH_HAVAL_OPS(p,b) extern const php_hash_ops php_hash_##p##haval##b##_ops; diff --git a/ext/hash/php_hash_murmur.h b/ext/hash/php_hash_murmur.h new file mode 100644 index 0000000000..100a8d1fa3 --- /dev/null +++ b/ext/hash/php_hash_murmur.h @@ -0,0 +1,57 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.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. | + +----------------------------------------------------------------------+ + | Author: Anatol Belski <ab@php.net> | + +----------------------------------------------------------------------+ +*/ + +#ifndef PHP_HASH_MURMUR_H +#define PHP_HASH_MURMUR_H + +typedef struct { + uint32_t h; + uint32_t carry; + uint32_t len; +} PHP_MURMUR3A_CTX; +#define PHP_MURMUR3A_SPEC "lll" + +PHP_HASH_API void PHP_MURMUR3AInit(PHP_MURMUR3A_CTX *ctx); +PHP_HASH_API void PHP_MURMUR3AUpdate(PHP_MURMUR3A_CTX *ctx, const unsigned char *in, size_t len); +PHP_HASH_API void PHP_MURMUR3AFinal(unsigned char digest[4], PHP_MURMUR3A_CTX *ctx); +PHP_HASH_API int PHP_MURMUR3ACopy(const php_hash_ops *ops, PHP_MURMUR3A_CTX *orig_context, PHP_MURMUR3A_CTX *copy_context); + +typedef struct { + uint32_t h[4]; + uint32_t carry[4]; + uint32_t len; +} PHP_MURMUR3C_CTX; +#define PHP_MURMUR3C_SPEC "lllllllll" + +PHP_HASH_API void PHP_MURMUR3CInit(PHP_MURMUR3C_CTX *ctx); +PHP_HASH_API void PHP_MURMUR3CUpdate(PHP_MURMUR3C_CTX *ctx, const unsigned char *in, size_t len); +PHP_HASH_API void PHP_MURMUR3CFinal(unsigned char digest[16], PHP_MURMUR3C_CTX *ctx); +PHP_HASH_API int PHP_MURMUR3CCopy(const php_hash_ops *ops, PHP_MURMUR3C_CTX *orig_context, PHP_MURMUR3C_CTX *copy_context); + +typedef struct { + uint64_t h[2]; + uint64_t carry[2]; + uint32_t len; +} PHP_MURMUR3F_CTX; +#define PHP_MURMUR3F_SPEC "qqqql" + +PHP_HASH_API void PHP_MURMUR3FInit(PHP_MURMUR3F_CTX *ctx); +PHP_HASH_API void PHP_MURMUR3FUpdate(PHP_MURMUR3F_CTX *ctx, const unsigned char *in, size_t len); +PHP_HASH_API void PHP_MURMUR3FFinal(unsigned char digest[16], PHP_MURMUR3F_CTX *ctx); +PHP_HASH_API int PHP_MURMUR3FCopy(const php_hash_ops *ops, PHP_MURMUR3F_CTX *orig_context, PHP_MURMUR3F_CTX *copy_context); + +#endif /* PHP_HASH_MURMUR_H */ + diff --git a/ext/hash/tests/hash-clone.phpt b/ext/hash/tests/hash-clone.phpt index 57567c0bc5..232d0a437f 100644 --- a/ext/hash/tests/hash-clone.phpt +++ b/ext/hash/tests/hash-clone.phpt @@ -143,6 +143,15 @@ string(16) "bebc746a33b6ab62" string(5) "joaat" string(8) "aaebf370" string(8) "aaebf370" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "1b328135" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "aa86566cc6bf3a0987b83aabee30411e" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" @@ -302,6 +311,15 @@ string(16) "893899e4415a920f" string(5) "joaat" string(8) "aaebf370" string(8) "836fb0e5" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "18578d03" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "28249178bb182686ef793aa56abb6aea" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" diff --git a/ext/hash/tests/hash_algos.phpt b/ext/hash/tests/hash_algos.phpt index cff71a7771..5327ed31e2 100644 --- a/ext/hash/tests/hash_algos.phpt +++ b/ext/hash/tests/hash_algos.phpt @@ -9,7 +9,7 @@ var_dump(hash_algos()); ?> --EXPECTF-- *** Testing hash_algos() : basic functionality *** -array(53) { +array(56) { [%d]=> string(3) "md2" [%d]=> @@ -87,6 +87,12 @@ array(53) { [%d]=> string(5) "joaat" [%d]=> + string(8) "murmur3a" + [%d]=> + string(8) "murmur3c" + [%d]=> + string(8) "murmur3f" + [%d]=> string(10) "haval128,3" [%d]=> string(10) "haval160,3" diff --git a/ext/hash/tests/hash_copy_001.phpt b/ext/hash/tests/hash_copy_001.phpt index 271326178d..ce76d18110 100644 --- a/ext/hash/tests/hash_copy_001.phpt +++ b/ext/hash/tests/hash_copy_001.phpt @@ -143,6 +143,15 @@ string(16) "bebc746a33b6ab62" string(5) "joaat" string(8) "aaebf370" string(8) "aaebf370" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "1b328135" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "aa86566cc6bf3a0987b83aabee30411e" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" @@ -302,6 +311,15 @@ string(16) "893899e4415a920f" string(5) "joaat" string(8) "aaebf370" string(8) "836fb0e5" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "18578d03" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "28249178bb182686ef793aa56abb6aea" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" diff --git a/ext/hash/tests/hash_serialize_001.phpt b/ext/hash/tests/hash_serialize_001.phpt index d515d2c5c5..409460d05b 100644 --- a/ext/hash/tests/hash_serialize_001.phpt +++ b/ext/hash/tests/hash_serialize_001.phpt @@ -154,6 +154,15 @@ string(16) "bebc746a33b6ab62" string(5) "joaat" string(8) "aaebf370" string(8) "aaebf370" +string(8) "murmur3a" +string(8) "1b328135" +string(8) "1b328135" +string(8) "murmur3c" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(32) "2f041a2a310ba026921bc6ba34f17a2f" +string(8) "murmur3f" +string(32) "aa86566cc6bf3a0987b83aabee30411e" +string(32) "aa86566cc6bf3a0987b83aabee30411e" string(10) "haval128,3" string(32) "86362472c8895e68e223ef8b3711d8d9" string(32) "86362472c8895e68e223ef8b3711d8d9" @@ -313,6 +322,15 @@ string(16) "893899e4415a920f" string(5) "joaat" string(8) "836fb0e5" string(8) "836fb0e5" +string(8) "murmur3a" +string(8) "18578d03" +string(8) "18578d03" +string(8) "murmur3c" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(32) "2af4fdc002fda7b7491459e70377823f" +string(8) "murmur3f" +string(32) "28249178bb182686ef793aa56abb6aea" +string(32) "28249178bb182686ef793aa56abb6aea" string(10) "haval128,3" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" string(32) "ebeeeb05c18af1e53d2d127b561d5e0d" diff --git a/ext/hash/tests/hash_serialize_002.phpt b/ext/hash/tests/hash_serialize_002.phpt index b6b4ccfb5e..c86a47cd7e 100644 --- a/ext/hash/tests/hash_serialize_002.phpt +++ b/ext/hash/tests/hash_serialize_002.phpt @@ -4,7 +4,7 @@ Hash: serialize()/unserialize() with HASH_HMAC <?php $algos = hash_algos(); -$non_crypto = ["adler32", "crc32", "crc32b", "crc32c", "fnv132", "fnv1a32", "fnv164", "fnv1a64", "joaat"]; +$non_crypto = ["adler32", "crc32", "crc32b", "crc32c", "fnv132", "fnv1a32", "fnv164", "fnv1a64", "joaat", "murmur3a", "murmur3c", "murmur3f"]; $key = "This is the key that I have"; foreach ($algos as $algo) { diff --git a/ext/hash/tests/murmurhash3.phpt b/ext/hash/tests/murmurhash3.phpt new file mode 100644 index 0000000000..6331b312d9 --- /dev/null +++ b/ext/hash/tests/murmurhash3.phpt @@ -0,0 +1,49 @@ +--TEST-- +Hash: MurmurHash3 test +--FILE-- +<?php + +$h = hash("murmur3a", "foo"); +echo $h, "\n"; + +$h = hash("murmur3c", "Two hashes meet in a bar", false); +echo $h, "\n"; +$h = hash("murmur3c", "hash me!"); +echo $h, "\n"; + +$h = hash("murmur3f", "Two hashes meet in a bar", false); +echo $h, "\n"; +$h = hash("murmur3f", "hash me!"); +echo $h, "\n"; + +$ctx = hash_init("murmur3a"); +hash_update($ctx, "hello"); +hash_update($ctx, " there"); +$h0 = hash_final($ctx); +$h1 = hash("murmur3a", "hello there"); +echo $h0, " ", $h1, "\n"; + +$ctx = hash_init("murmur3c"); +hash_update($ctx, "hello"); +hash_update($ctx, " there"); +$h0 = hash_final($ctx); +$h1 = hash("murmur3c", "hello there"); +echo $h0, " ", $h1, "\n"; + +$ctx = hash_init("murmur3f"); +hash_update($ctx, "hello"); +hash_update($ctx, " there"); +$h0 = hash_final($ctx); +$h1 = hash("murmur3f", "hello there"); +echo $h0, " ", $h1, "\n"; + +?> +--EXPECT-- +f6a5c420 +8036c2707453c6f37348142be7eaf75c +c7009299985a5627a9280372a9280372 +40256ed26fa6ece7785092ed33c8b659 +c43668294e89db0ba5772846e5804467 +6440964d 6440964d +2bcadca212d62deb69712a721e593089 2bcadca212d62deb69712a721e593089 +81514cc240f57a165c95eb63f9c0eedf 81514cc240f57a165c95eb63f9c0eedf diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index c561a5e72c..4c72c90ff6 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -2758,7 +2758,7 @@ PHP_FUNCTION(imap_sort) } array_init(return_value); - if (slst != NIL && slst != 0) { + if (slst != NULL) { for (sl = slst; *sl; sl++) { add_next_index_long(return_value, *sl); } diff --git a/ext/imap/tests/CONFLICTS b/ext/imap/tests/CONFLICTS deleted file mode 100644 index c301c0ffac..0000000000 --- a/ext/imap/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -imap diff --git a/ext/imap/tests/README.md b/ext/imap/tests/README.md index 6324ab7f9e..1dee1d2663 100644 --- a/ext/imap/tests/README.md +++ b/ext/imap/tests/README.md @@ -11,14 +11,14 @@ hMailServer on Windows. The tests are intended to be mailserver agnostic. ## Set-up tests on Ubuntu (checked on Ubuntu 18.04 (Bionic)) The necessary packages can be installed using the following command; -`apt-get install libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd` +`apt-get install libc-client-dev libkrb5-dev dovecot-core dovecot-pop3d dovecot-imapd sendmail` The build of PHP will need to be compiled with the following flags: ``` --with-imap --with-kerberos --with-imap-ssl ``` -Then run the set-up script `ext/imap/tests/setup.sh` which will add the `vmail` +Then run the set-up script `ext/imap/tests/setup/setup.sh` which will add the `vmail` group and user which is used by Dovecot for the mailbox. It will also copy the -`ext/imap/tests/dovecot.conf` and `ext/imap/tests/dovecotpass` to the correct +`ext/imap/tests/setup/dovecot.conf` and `ext/imap/tests/setup/dovecotpass` to the correct location for Dovecot and restarts it for the new configuration to be enabled. diff --git a/ext/imap/tests/bug31142_2.phpt b/ext/imap/tests/bug31142_2.phpt index 004c054963..dbb4c9a6ad 100644 --- a/ext/imap/tests/bug31142_2.phpt +++ b/ext/imap/tests/bug31142_2.phpt @@ -2,9 +2,7 @@ Bug #31142 test #2 (imap_mail_compose() generates incorrect output) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php diff --git a/ext/imap/tests/bug32589.phpt b/ext/imap/tests/bug32589.phpt index 52a73c6f23..ad49915018 100644 --- a/ext/imap/tests/bug32589.phpt +++ b/ext/imap/tests/bug32589.phpt @@ -2,9 +2,7 @@ Bug #32589 (crash inside imap_mail_compose() function) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php diff --git a/ext/imap/tests/bug35669.phpt b/ext/imap/tests/bug35669.phpt index fc7a135bce..7a9372d0a0 100644 --- a/ext/imap/tests/bug35669.phpt +++ b/ext/imap/tests/bug35669.phpt @@ -2,45 +2,43 @@ Bug #35669 (imap_mail_compose() crashes with multipart-multiboundary-email) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php - $envelope["from"] = 'Santa <somewhere@northpole.gov>'; - $envelope["to"] = 'The bad smurf <bad@smurf.com>'; - $envelope['date'] = 'Wed, 04 Jan 2006 19:24:43 -0500'; +$envelope["from"] = 'Santa <somewhere@northpole.gov>'; +$envelope["to"] = 'The bad smurf <bad@smurf.com>'; +$envelope['date'] = 'Wed, 04 Jan 2006 19:24:43 -0500'; - $multipart["type"] = TYPEMULTIPART; - $multipart["subtype"] = "MIXED"; - $body[] = $multipart; //add multipart stuff +$multipart["type"] = TYPEMULTIPART; +$multipart["subtype"] = "MIXED"; +$body[] = $multipart; //add multipart stuff - $textpart["type"] = TYPEMULTIPART; - $textpart["subtype"] = "ALTERNATIVE"; - $body[] = $textpart; //add body part +$textpart["type"] = TYPEMULTIPART; +$textpart["subtype"] = "ALTERNATIVE"; +$body[] = $textpart; //add body part - $plain["type"] = TYPETEXT; - $plain["subtype"] = "PLAIN"; - $plain["charset"] = "iso-8859-1"; - $plain["encoding"] = ENCQUOTEDPRINTABLE; - $plain["description"] = "Plaintype part of message"; - $plain['disposition'] = "inline"; - $plain["contents.data"] = 'See mom, it will crash'; +$plain["type"] = TYPETEXT; +$plain["subtype"] = "PLAIN"; +$plain["charset"] = "iso-8859-1"; +$plain["encoding"] = ENCQUOTEDPRINTABLE; +$plain["description"] = "Plaintype part of message"; +$plain['disposition'] = "inline"; +$plain["contents.data"] = 'See mom, it will crash'; - $body[] = $plain; //next add plain text part +$body[] = $plain; //next add plain text part - $html["type"] = TYPETEXT; - $html["subtype"] = "HTML"; - $html["charset"] = "iso-8859-1"; - $html["encoding"] = ENCQUOTEDPRINTABLE; - $html["description"] = "HTML part of message"; - $html['disposition'] = "inline"; - $html["contents.data"] = 'See mom, it will <b>crash</b>'; +$html["type"] = TYPETEXT; +$html["subtype"] = "HTML"; +$html["charset"] = "iso-8859-1"; +$html["encoding"] = ENCQUOTEDPRINTABLE; +$html["description"] = "HTML part of message"; +$html['disposition'] = "inline"; +$html["contents.data"] = 'See mom, it will <b>crash</b>'; - $body[] = $html; +$body[] = $html; - echo imap_mail_compose($envelope, $body); +echo imap_mail_compose($envelope, $body); ?> --EXPECTF-- Date: Wed, 04 Jan 2006 19:24:43 -0500 diff --git a/ext/imap/tests/bug44098.phpt b/ext/imap/tests/bug44098.phpt index 2a0f5cef44..2e0f025d6a 100644 --- a/ext/imap/tests/bug44098.phpt +++ b/ext/imap/tests/bug44098.phpt @@ -2,19 +2,14 @@ Bug #44098 (imap_utf8() returns only capital letters) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php $exp = 'Luzon®14 dot CoM'; $res = imap_utf8('=?iso-8859-1?b?THV6b26uMTQ=?= dot CoM'); -if ($res != $exp) { - echo "failed: got <$res>, expected <exp>\n"; -} else { - echo "ok"; -} +var_dump($res); + ?> --EXPECT-- -ok +string(17) "Luzon®14 dot CoM" diff --git a/ext/imap/tests/bug45705_1.phpt b/ext/imap/tests/bug45705_1.phpt index 05d3a0a2f6..b8d33e6758 100644 --- a/ext/imap/tests/bug45705_1.phpt +++ b/ext/imap/tests/bug45705_1.phpt @@ -2,9 +2,7 @@ Bug #45705 test #1 (imap rfc822_parse_adrlist() modifies passed address parameter) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php diff --git a/ext/imap/tests/bug45705_2.phpt b/ext/imap/tests/bug45705_2.phpt index 97c4118614..a4e7828d1f 100644 --- a/ext/imap/tests/bug45705_2.phpt +++ b/ext/imap/tests/bug45705_2.phpt @@ -2,9 +2,7 @@ Bug #45705 test #2 (imap rfc822_parse_adrlist() modifies passed address parameter) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php diff --git a/ext/imap/tests/bug53377.phpt b/ext/imap/tests/bug53377.phpt index a507369046..083d951c20 100644 --- a/ext/imap/tests/bug53377.phpt +++ b/ext/imap/tests/bug53377.phpt @@ -2,9 +2,7 @@ Bug #53377 (imap_mime_header_decode() doesn't ignore \t during long MIME header unfolding) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> --FILE-- <?php diff --git a/ext/imap/tests/bug63126.phpt b/ext/imap/tests/bug63126.phpt index 8eea34cf1d..8297b509ae 100644 --- a/ext/imap/tests/bug63126.phpt +++ b/ext/imap/tests/bug63126.phpt @@ -4,11 +4,11 @@ imap_open() DISABLE_AUTHENTICATOR ignores array param <?php extension_loaded('imap') or die('skip imap extension not available in this build'); -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__. '/setup/imap_include.inc'); -$in = @imap_open($default_mailbox, $username, $password, OP_HALFOPEN, 1); +$in = @imap_open(IMAP_SERVER_DEBUG, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD, OP_HALFOPEN, 1); if (!$in) { - die("skip could not connect to mailbox $default_mailbox"); + die("skip could not connect to mailbox " . IMAP_SERVER_DEBUG); } $kerberos = false; if (is_array($errors = imap_errors())) { @@ -22,16 +22,19 @@ if (!$kerberos) { die("skip need a GSSAPI/Kerberos aware server"); } ?> +--CONFLICTS-- +defaultmailbox --FILE-- <?php +// TODO Test Kerberos on CI $tests = array( 'Array' => array('DISABLE_AUTHENTICATOR' => array('GSSAPI','NTLM')), 'String' => array('DISABLE_AUTHENTICATOR' => 'GSSAPI'), ); -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__. '/setup/imap_include.inc'); foreach ($tests as $name => $testparams) { echo "Test for $name\n"; - $in = imap_open($default_mailbox, $username, $password, OP_HALFOPEN, 1, $testparams); + $in = imap_open(IMAP_SERVER_DEBUG, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD, OP_HALFOPEN, 1, $testparams); if ($in) { if (is_array($errors = imap_errors())) { foreach ($errors as $err) { diff --git a/ext/imap/tests/bug64076.phpt b/ext/imap/tests/bug64076.phpt index ccafcfe251..7e9ee6fd04 100644 --- a/ext/imap/tests/bug64076.phpt +++ b/ext/imap/tests/bug64076.phpt @@ -2,22 +2,23 @@ Bug #64076 (imap_sort() does not return FALSE on failure) --SKIPIF-- <?php -require_once __DIR__ . '/skipif.inc'; +require_once __DIR__ . '/setup/skipif.inc'; ?> --FILE-- <?php -require_once __DIR__ . '/imap_include.inc'; -$stream = setup_test_mailbox('', 2); +require_once __DIR__ . '/setup/imap_include.inc'; +$stream = setup_test_mailbox('bug64076', 2); imap_errors(); // clear error stack var_dump(imap_sort($stream, SORTFROM, 0, 0, 'UNSUPPORTED SEARCH CRITERIUM')); var_dump(imap_errors() !== false); ?> --CLEAN-- <?php -require_once __DIR__ . '/clean.inc'; +$mailbox_suffix = 'bug64076'; +require_once(__DIR__ . '/setup/clean.inc'); ?> --EXPECT-- Create a temporary mailbox and add 2 msgs -.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created +New mailbox created bool(false) bool(true) diff --git a/ext/imap/tests/bug77020.phpt b/ext/imap/tests/bug77020.phpt index 43c8133700..d828654983 100644 --- a/ext/imap/tests/bug77020.phpt +++ b/ext/imap/tests/bug77020.phpt @@ -6,8 +6,8 @@ if (!extension_loaded('imap')) die('skip imap extension not available'); ?> --FILE-- <?php -imap_mail('1', 1, NULL); +@imap_mail('1', 1, NULL); +echo 'done' ?> --EXPECTF-- -Warning: imap_mail(): No message string in mail command in %s on line %d -%S +%Adone diff --git a/ext/imap/tests/bug77153.phpt b/ext/imap/tests/bug77153.phpt index 7b759621fe..d767ce5472 100644 --- a/ext/imap/tests/bug77153.phpt +++ b/ext/imap/tests/bug77153.phpt @@ -1,11 +1,11 @@ ---TEST-- +--TEST-- Bug #77153 (imap_open allows to run arbitrary shell commands via mailbox parameter) --SKIPIF-- <?php - if (!extension_loaded("imap")) { - die("skip imap extension not available"); - } +extension_loaded('imap') or die('skip imap extension not available in this build'); ?> +--CONFLICTS-- +defaultmailbox --FILE-- <?php $payload = "echo 'BUG'> " . __DIR__ . '/__bug'; @@ -21,4 +21,4 @@ bool(false) --CLEAN-- <?php if(file_exists(__DIR__ . '/__bug')) unlink(__DIR__ . '/__bug'); -?>
\ No newline at end of file +?> diff --git a/ext/imap/tests/bug80213.phpt b/ext/imap/tests/bug80213.phpt index 9a7961df77..5bad48f306 100644 --- a/ext/imap/tests/bug80213.phpt +++ b/ext/imap/tests/bug80213.phpt @@ -14,8 +14,13 @@ $body = [[ 'type.parameters' => ['param'], 'disposition' => ['disp'], ]]; -imap_mail_compose($envelope, $body); +var_dump(imap_mail_compose($envelope, $body)); echo "done\n"; ?> --EXPECT-- +string(67) "MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; CHARSET=US-ASCII + + +" done diff --git a/ext/imap/tests/bug80226.phpt b/ext/imap/tests/bug80226.phpt index 95ec235178..6cf4cc8a58 100644 --- a/ext/imap/tests/bug80226.phpt +++ b/ext/imap/tests/bug80226.phpt @@ -2,12 +2,25 @@ Bug #80226 (imap_sort() leaks sortpgm memory) --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream = imap_open($default_mailbox, $username, $password); -imap_sort($stream, SORTFROM, 0); +require_once(__DIR__.'/setup/imap_include.inc'); + +echo "Create a new mailbox for test\n"; + +$stream = setup_test_mailbox("bug80226", 0); +var_dump(imap_sort($stream, SORTFROM, 0)); +?> +--CLEAN-- +<?php +$mailbox_suffix = 'bug80226'; +require_once(__DIR__ . '/setup/clean.inc'); ?> --EXPECT-- +Create a new mailbox for test +Create a temporary mailbox and add 0 msgs +New mailbox created +array(0) { +} diff --git a/ext/imap/tests/clean.inc b/ext/imap/tests/clean.inc deleted file mode 100644 index 8bc566ba32..0000000000 --- a/ext/imap/tests/clean.inc +++ /dev/null @@ -1,25 +0,0 @@ -<?php -include_once(dirname(__FILE__) . '/imap_include.inc'); - -$imap_stream = imap_open($default_mailbox, $username, $password); - -// delete all msgs in default mailbox, i.e INBOX -$check = imap_check($imap_stream); -for ($i = 1; $i <= $check->Nmsgs; $i++) { - imap_delete($imap_stream, $i); -} - -$mailboxes = imap_getmailboxes($imap_stream, $server, '*'); - -foreach($mailboxes as $value) { - // Only delete mailboxes with our prefix - if (preg_match('/\{.*?\}INBOX\.(.+)/', $value->name, $match) == 1) { - if (strlen($match[1]) >= strlen($mailbox_prefix) - && substr_compare($match[1], $mailbox_prefix, 0, strlen($mailbox_prefix)) == 0) { - imap_deletemailbox($imap_stream, $value->name); - } - } -} - -imap_close($imap_stream, CL_EXPUNGE); -?> diff --git a/ext/imap/tests/imap_append_basic.phpt b/ext/imap/tests/imap_append_basic.phpt index e75b452596..ab2e46886e 100644 --- a/ext/imap/tests/imap_append_basic.phpt +++ b/ext/imap/tests/imap_append_basic.phpt @@ -2,22 +2,19 @@ Test imap_append() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__. '/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_append() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__. '/setup/imap_include.inc'); echo "Create a new mailbox for test\n"; -$imap_stream = setup_test_mailbox("", 0); -if (!is_resource($imap_stream)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} +$imap_stream = setup_test_mailbox("imapappendbaisc", 0); $mb_details = imap_mailboxmsginfo($imap_stream); -echo "Add a couple of msgs to new mailbox " . $mb_details->Mailbox . "\n"; +echo "Add a couple of msgs to the new mailbox\n"; var_dump(imap_append($imap_stream, $mb_details->Mailbox , "From: webmaster@something.com\r\n" . "To: info@something.com\r\n" @@ -44,14 +41,15 @@ imap_close($imap_stream); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapappendbaisc'; +require_once(__DIR__ . '/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_append() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 0 msgs -.. mailbox '%s' created -Add a couple of msgs to new mailbox {%s}INBOX.%s +New mailbox created +Add a couple of msgs to the new mailbox bool(true) bool(true) Msg Count after append : 2 diff --git a/ext/imap/tests/imap_body.phpt b/ext/imap/tests/imap_body.phpt index 6c2f629398..59678ad539 100644 --- a/ext/imap/tests/imap_body.phpt +++ b/ext/imap/tests/imap_body.phpt @@ -5,33 +5,40 @@ Paul Sohier #phptestfest utrecht --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = imap_open($default_mailbox, $username, $password) or - die("Cannot connect to mailbox $default_mailbox: " . imap_last_error()); +require_once(__DIR__.'/setup/imap_include.inc'); + +$imap_stream = setup_test_mailbox("imapbodyvalueerror", 0); try { - imap_body($stream_id,-1); + imap_body($imap_stream,-1); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } try { - imap_body($stream_id,1,-1); + imap_body($imap_stream,1,-1); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } //Access not existing -var_dump(imap_body($stream_id, 255, FT_UID)); +var_dump(imap_body($imap_stream, 255, FT_UID)); -imap_close($stream_id); +imap_close($imap_stream); ?> +--CLEAN-- +<?php +$mailbox_suffix = 'imapbodyvalueerror'; +require_once(__DIR__ . '/setup/clean.inc'); +?> --EXPECTF-- +Create a temporary mailbox and add 0 msgs +New mailbox created imap_body(): Argument #2 ($message_num) must be greater than 0 imap_body(): Argument #3 ($flags) must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL diff --git a/ext/imap/tests/imap_body_basic.phpt b/ext/imap/tests/imap_body_basic.phpt index 3034785a90..b5cb0fcd33 100644 --- a/ext/imap/tests/imap_body_basic.phpt +++ b/ext/imap/tests/imap_body_basic.phpt @@ -2,19 +2,16 @@ Test imap_body() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_body() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); echo "Create a new mailbox for test\n"; -$imap_stream = setup_test_mailbox("", 1); -if (!is_resource($imap_stream)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} +$imap_stream = setup_test_mailbox("imapbodybasic", 1); $check = imap_check($imap_stream); echo "Msg Count in new mailbox: ". $check->Nmsgs . "\n"; @@ -29,15 +26,16 @@ imap_close($imap_stream); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapbodybasic'; +require_once __DIR__.'/setup/clean.inc'; ?> --EXPECTF-- *** Testing imap_body() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 1 msgs -.. mailbox '%s' created +New mailbox created Msg Count in new mailbox: 1 string(%d) "1: this is a test message, please ignore -" +newline%r\R?%r" string(%d) "1: this is a test message, please ignore -" +newline%r\R?%r" diff --git a/ext/imap/tests/imap_bodystruct_basic.phpt b/ext/imap/tests/imap_bodystruct_basic.phpt index 56c88399c3..f969e86764 100644 --- a/ext/imap/tests/imap_bodystruct_basic.phpt +++ b/ext/imap/tests/imap_bodystruct_basic.phpt @@ -2,47 +2,43 @@ Test imap_bodystruct() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing string imap_bodystruct : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); echo "Create a new mailbox for test and add a multipart msgs\n"; -$imap_stream = setup_test_mailbox("", 1, $mailbox, "multipart"); -if (!is_resource($imap_stream)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} +$imap_stream = setup_test_mailbox("imapbodystructbasic", 1, $mailbox, "multipart"); echo "\nGet and validate structure of body part 1\n"; $m = imap_bodystruct($imap_stream, 1, "1"); -$mandatoryFields = array( - 'ifsubtype', - 'ifdescription', - 'ifid', - 'ifdisposition', - 'ifdparameters', - 'ifparameters', - ); +$mandatoryFields = [ + 'ifsubtype', + 'ifdescription', + 'ifid', + 'ifdisposition', + 'ifdparameters', + 'ifparameters', +]; + +function isValid($param) { + return ($param == 0) || ($param == 1); +} -foreach($mandatoryFields as $mf) -{ - if(isValid($m->$mf)) - { - echo "$mf is 0 or 1\n"; - } - else - { - echo "$mf FAIL\n"; - } +foreach($mandatoryFields as $mf) { + if (isValid($m->$mf)) { + echo "$mf is 0 or 1\n"; + } else { + echo "$mf FAIL\n"; + } } -if(is_array($m->parameters)) -{ - echo "parameters is an array\n"; +if(is_array($m->parameters)) { + echo "parameters is an array\n"; } echo "\nTry to get part 4!\n"; @@ -50,28 +46,17 @@ var_dump(imap_bodystruct($imap_stream, 1, "4")); imap_close($imap_stream); -function isValid($param) -{ - if(($param == 0) || ($param == 1)) - { - $result=true; - } - else - { - $result=false; - } -return $result; -} ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapbodystructbasic'; +require_once(__DIR__ . '/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing string imap_bodystruct : basic functionality *** Create a new mailbox for test and add a multipart msgs Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Get and validate structure of body part 1 ifsubtype is 0 or 1 diff --git a/ext/imap/tests/imap_clearflag_full_basic.phpt b/ext/imap/tests/imap_clearflag_full_basic.phpt index cc949385fc..ee65d202ce 100644 --- a/ext/imap/tests/imap_clearflag_full_basic.phpt +++ b/ext/imap/tests/imap_clearflag_full_basic.phpt @@ -2,19 +2,16 @@ Test imap_clearflag_full() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_clearflag_full() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); echo "Create a new mailbox for test\n"; -$imap_stream = setup_test_mailbox("", 10); -if (!is_resource($imap_stream)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} +$imap_stream = setup_test_mailbox("imapclearflagfullbasic", 10); $check = imap_check($imap_stream); echo "Initial msg count in new_mailbox : ". $check->Nmsgs . "\n"; @@ -44,13 +41,14 @@ imap_close($imap_stream); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapclearflagfullbasic'; +require_once(__DIR__ . '/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_clearflag_full() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 10 msgs -.. mailbox '{%s}%s' created +New mailbox created Initial msg count in new_mailbox : 10 Set some flags bool(true) diff --git a/ext/imap/tests/imap_close_basic.phpt b/ext/imap/tests/imap_close_basic.phpt index 57b2e7eab1..c962b62f7f 100644 --- a/ext/imap/tests/imap_close_basic.phpt +++ b/ext/imap/tests/imap_close_basic.phpt @@ -2,17 +2,17 @@ Test imap_close() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_close() : basic functionality ***\n"; // include file for required variables in imap_open() -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); // Initialize required variables -$stream_id = setup_test_mailbox('', 3, $mailbox); // set up temp mailbox with 3 messages +$stream_id = setup_test_mailbox('imapclosebasic', 3, $mailbox); // set up temp mailbox with 3 messages $options = CL_EXPUNGE; // mark messages in inbox for deletion @@ -25,7 +25,7 @@ echo "\n-- Call to imap_close() with all possible arguments --\n"; var_dump( imap_close($stream_id, $options) ); // check that CL_EXPUNGE worked -$stream_id = imap_open($mailbox, $username, $password); +$stream_id = imap_open($mailbox, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD); echo "There are now " . imap_num_msg($stream_id) . " msgs in mailbox '$mailbox'\n"; // Calling imap_close() with mandatory arguments @@ -34,16 +34,17 @@ var_dump( imap_close($stream_id) ); ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapclosebasic'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_close() : basic functionality *** Create a temporary mailbox and add 3 msgs -.. mailbox '%sINBOX.phpttest' created +New mailbox created -- Call to imap_close() with all possible arguments -- bool(true) -There are now 0 msgs in mailbox '%sINBOX.phpttest' +There are now 0 msgs in mailbox '%sINBOX.phpttestimapclosebasic' -- Call to imap_close() with mandatory arguments -- bool(true) diff --git a/ext/imap/tests/imap_close_variation4.phpt b/ext/imap/tests/imap_close_variation4.phpt index b57f607f88..ff78ac985c 100644 --- a/ext/imap/tests/imap_close_variation4.phpt +++ b/ext/imap/tests/imap_close_variation4.phpt @@ -2,7 +2,7 @@ Test imap_close() function : usage variations - different ints as $flags arg --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -13,11 +13,11 @@ require_once(__DIR__.'/skipif.inc'); echo "*** Testing imap_close() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); $inputs = array (0, 3.2768e4, -32768, PHP_INT_MAX, -PHP_INT_MAX); -$stream_id = setup_test_mailbox('', 3, $mailbox); // set up temp mailbox with 3 messages +$stream_id = setup_test_mailbox('imapclosevar4', 3, $mailbox); // set up temp mailbox with 3 messages // loop through each element of $inputs to check the behavior of imap_close() $iterator = 1; @@ -40,7 +40,7 @@ foreach($inputs as $input) { imap_close($stream_id, CL_EXPUNGE); } else { // if imap_close was successful test whether CL_EXPUNGE was set by doing a message count - $imap_stream = imap_open($mailbox, $username, $password); + $imap_stream = imap_open($mailbox, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD); $num_msg = imap_num_msg($imap_stream); if ($num_msg != 0) { echo "CL_EXPUNGE was not set, $num_msg msgs in mailbox\n"; @@ -53,19 +53,20 @@ foreach($inputs as $input) { $iterator++; // get $stream_id for next iteration - $stream_id = imap_open($mailbox, $username, $password); + $stream_id = imap_open($mailbox, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD); populate_mailbox($stream_id, $mailbox, 3); }; ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapclosevar4'; +require_once(__DIR__.'/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_close() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created -- Iteration 1 -- bool(true) diff --git a/ext/imap/tests/imap_createmailbox_basic.phpt b/ext/imap/tests/imap_createmailbox_basic.phpt index 84db5cbd31..83dc3d0f6e 100644 --- a/ext/imap/tests/imap_createmailbox_basic.phpt +++ b/ext/imap/tests/imap_createmailbox_basic.phpt @@ -2,22 +2,21 @@ Test imap_createmailbox() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once __DIR__.'/setup/skipif.inc'; ?> --FILE-- <?php echo "*** Testing imap_createmailbox() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once __DIR__.'/setup/imap_include.inc'; -$imap_stream = imap_open($default_mailbox, $username, $password) or - die("Cannot connect to mailbox $default_mailbox: " . imap_last_error()); +$imap_stream = setup_test_mailbox("imapcreatemailboxbasic", 0); $newname = "phpnewbox"; echo "Newname will be '$newname'\n"; -$newbox = imap_utf7_encode($server.$newname); +$newbox = imap_utf7_encode(IMAP_SERVER.$newname); if (imap_createmailbox($imap_stream, $newbox)) { echo "Add a couple of msgs to '$newname' mailbox\n"; @@ -49,8 +48,15 @@ if (imap_createmailbox($imap_stream, $newbox)) { imap_close($imap_stream); ?> +--CLEAN-- +<?php +$mailbox_suffix = 'imapcreatemailboxbasic'; +require_once __DIR__ . '/setup/clean.inc'; +?> --EXPECTF-- *** Testing imap_createmailbox() : basic functionality *** +Create a temporary mailbox and add 0 msgs +New mailbox created Newname will be 'phpnewbox' Add a couple of msgs to 'phpnewbox' mailbox Your new mailbox 'phpnewbox' has the following status: diff --git a/ext/imap/tests/imap_errors_basic.phpt b/ext/imap/tests/imap_errors_basic.phpt index c897193766..f691a5c705 100644 --- a/ext/imap/tests/imap_errors_basic.phpt +++ b/ext/imap/tests/imap_errors_basic.phpt @@ -2,16 +2,16 @@ Test imap_errors() function : invalid password --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once __DIR__.'/setup/skipif.inc'; ?> --FILE-- <?php echo "*** Testing imap_errors() : invalid password ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once __DIR__.'/setup/imap_include.inc'; $password = "bogus"; // invalid password to use in this test echo "Issue opening with invalid password, 1 retry\n"; -$mbox = imap_open($default_mailbox, $username, $password, OP_READONLY, 1); +$mbox = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, $password, OP_READONLY, 1); echo "List any errors\n"; var_dump(imap_errors()); diff --git a/ext/imap/tests/imap_fetch_overview_basic.phpt b/ext/imap/tests/imap_fetch_overview_basic.phpt index a9fe85c45e..ea379b1e59 100644 --- a/ext/imap/tests/imap_fetch_overview_basic.phpt +++ b/ext/imap/tests/imap_fetch_overview_basic.phpt @@ -2,16 +2,16 @@ Test imap_fetch_overview() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_fetch_overview() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once __DIR__.'/setup/imap_include.inc'; // create a new mailbox and add two new messages to it -$stream_id = setup_test_mailbox('', 2, $mailbox, 'notSimple'); +$stream_id = setup_test_mailbox('imapfetchoverviewbasic', 2, $mailbox, false); // get UID for new message $msg_no = imap_uid($stream_id, 1); @@ -40,12 +40,13 @@ imap_close($stream_id); ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchoverviewbasic'; +require_once __DIR__.'/setup/clean.inc'; ?> --EXPECTF-- *** Testing imap_fetch_overview() : basic functionality *** Create a temporary mailbox and add 2 msgs -.. mailbox '{%s}%s' created +New mailbox created -- All possible arguments -- diff --git a/ext/imap/tests/imap_fetch_overview_variation3.phpt b/ext/imap/tests/imap_fetch_overview_variation3.phpt index f416887388..1ed528a173 100644 --- a/ext/imap/tests/imap_fetch_overview_variation3.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation3.phpt @@ -2,7 +2,7 @@ Test imap_fetch_overview() function : usage variations - FT_UID option --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -14,19 +14,20 @@ require_once(__DIR__.'/skipif.inc'); echo "*** Testing imap_fetch_overview() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once __DIR__.'/setup/imap_include.inc'; // Initialise required variables -$stream_id = setup_test_mailbox('', 1); // set up temporary mailbox with one simple message +$stream_id = setup_test_mailbox('imapfetchoverviewvar3', 1); // set up temporary mailbox with one simple message $msg_no = 1; $msg_uid = imap_uid($stream_id, $msg_no); -$flags = array ('1', - true, - 1.000000000000001, - 0.00001e5, - 245 - ); +$flags = [ + '1', + true, + 1.000000000000001, + 0.00001e5, + 245, +]; imap_check($stream_id); foreach($flags as $option) { @@ -45,12 +46,13 @@ foreach($flags as $option) { ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchoverviewvar3'; +require_once(__DIR__.'/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_fetch_overview() : usage variations *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Testing with option value:string(1) "1" imap_fetch_overview() returns an object diff --git a/ext/imap/tests/imap_fetch_overview_variation5.phpt b/ext/imap/tests/imap_fetch_overview_variation5.phpt index 9774e682c1..6a8b6abd51 100644 --- a/ext/imap/tests/imap_fetch_overview_variation5.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation5.phpt @@ -2,7 +2,7 @@ Test imap_fetch_overview() function : usage variations - $msg_no argument --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -12,25 +12,31 @@ require_once(__DIR__.'/skipif.inc'); */ echo "*** Testing imap_fetch_overview() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once __DIR__.'/setup/imap_include.inc'; -$stream_id = setup_test_mailbox('', 3, $mailbox, 'notSimple'); // set up temp mailbox with 3 msgs +$stream_id = setup_test_mailbox('imapfetchoverviewvar5', 3, $mailbox, false); // set up temp mailbox with 3 msgs -$sequences = array (0, 4, '4', // out of range - '2', '1,3', '1, 2', - '1:3'); // pass uid without setting FT_UID option +$sequences = [ + 0, + 4, // out of range + '4', // out of range + '2', + '1,3', + '1, 2', + '1:3', // pass uid without setting FT_UID option +]; -foreach($sequences as $msg_no) { +foreach ($sequences as $msg_no) { echo "\n-- \$msg_no is $msg_no --\n"; - $overview = imap_fetch_overview($stream_id, $msg_no); + $overview = imap_fetch_overview($stream_id, $msg_no); if (!$overview) { echo imap_last_error() . "\n"; - } else { + } else { foreach($overview as $ov) { echo "\n"; displayOverviewFields($ov); - } } + } } // clear error stack @@ -38,12 +44,13 @@ imap_errors(); ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchoverviewvar5'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_fetch_overview() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created -- $msg_no is 0 -- Sequence out of range diff --git a/ext/imap/tests/imap_fetch_overview_variation6.phpt b/ext/imap/tests/imap_fetch_overview_variation6.phpt index 256f631082..0535b3d5ac 100644 --- a/ext/imap/tests/imap_fetch_overview_variation6.phpt +++ b/ext/imap/tests/imap_fetch_overview_variation6.phpt @@ -2,7 +2,7 @@ Test imap_fetch_overview() function : usage variations - multipart message --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -12,9 +12,9 @@ require_once(__DIR__.'/skipif.inc'); echo "*** Testing imap_fetch_overview() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once __DIR__.'/setup/imap_include.inc'; -$stream_id = setup_test_mailbox('', 0, $mailbox); // setup temp mailbox +$stream_id = setup_test_mailbox('imapfetchoverviewvar6', 0, $mailbox); // setup temp mailbox create_multipart_message($stream_id, $mailbox); // refresh msg numbers @@ -37,7 +37,7 @@ displayOverviewFields($a[0]); function create_multipart_message($imap_stream, $mailbox) { global $users, $domain; $envelope["from"]= "foo@anywhere.com"; - $envelope["to"] = "$users[0]@$domain"; + $envelope["to"] = IMAP_USERS[0] . '@' . IMAP_MAIL_DOMAIN; $envelope["subject"] = "Test msg 1"; $part1["type"] = TYPEMULTIPART; @@ -82,12 +82,13 @@ function create_multipart_message($imap_stream, $mailbox) { ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchoverviewvar6'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_fetch_overview() : usage variations *** Create a temporary mailbox and add 0 msgs -.. mailbox '{%s}%s' created +New mailbox created --> Object #1 size is %d diff --git a/ext/imap/tests/imap_fetchbody_basic.phpt b/ext/imap/tests/imap_fetchbody_basic.phpt index 3c16f939c8..d0324383ea 100644 --- a/ext/imap/tests/imap_fetchbody_basic.phpt +++ b/ext/imap/tests/imap_fetchbody_basic.phpt @@ -2,7 +2,7 @@ Test imap_fetchbody() function : basic functionality --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -12,12 +12,12 @@ require_once(__DIR__.'/skipif.inc'); */ echo "*** Testing imap_fetchbody() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); // Initialise all required variables // set up mailbox with one message -$stream_id = setup_test_mailbox('', 1, $mailbox, 'notSimple'); +$stream_id = setup_test_mailbox('imapfetchbodybasic', 1, $mailbox, false); $msg_no = 1; $section = '2'; @@ -57,12 +57,13 @@ var_dump( $overview[0]->seen ); ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchbodybasic'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_fetchbody() : basic functionality *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created -- All possible arguments -- -- Option is FT_UID -- diff --git a/ext/imap/tests/imap_fetchbody_variation4.phpt b/ext/imap/tests/imap_fetchbody_variation4.phpt index df5d895670..5e25dd1126 100644 --- a/ext/imap/tests/imap_fetchbody_variation4.phpt +++ b/ext/imap/tests/imap_fetchbody_variation4.phpt @@ -2,7 +2,7 @@ Test imap_fetchbody() function : usage variations - FT_UID option --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -13,10 +13,10 @@ require_once(__DIR__.'/skipif.inc'); */ echo "*** Testing imap_fetchbody() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); // Initialise required variables -$stream_id = setup_test_mailbox('', 1); // set up temporary mailbox with one simple message +$stream_id = setup_test_mailbox('imapfetchbodyvar4', 1); // set up temporary mailbox with one simple message $msg_no = 1; $msg_uid = imap_uid($stream_id, $msg_no); $section = 1; @@ -47,12 +47,13 @@ foreach($flags as $option) { ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchbodyvar4'; +require_once(__DIR__.'/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_fetchbody() : usage variations *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created -- Iteration 1 -- FT_UID valid diff --git a/ext/imap/tests/imap_fetchbody_variation6.phpt b/ext/imap/tests/imap_fetchbody_variation6.phpt index 8b3d73540a..7889c40193 100644 --- a/ext/imap/tests/imap_fetchbody_variation6.phpt +++ b/ext/imap/tests/imap_fetchbody_variation6.phpt @@ -2,7 +2,7 @@ Test imap_fetchbody() function : usage variations - $message_num arg --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -13,10 +13,10 @@ require_once(__DIR__.'/skipif.inc'); echo "*** Testing imap_fetchbody() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); //Initialise required variables -$stream_id = setup_test_mailbox('', 3); // set up temp mailbox with simple msgs +$stream_id = setup_test_mailbox('imapfetchbodyvar6', 3); // set up temp mailbox with simple msgs $section = 1; $sequences = [0, /* out of range */ 4, 1]; @@ -32,12 +32,13 @@ foreach($sequences as $message_num) { ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchbodyvar6'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_fetchbody() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created -- $message_num is 0 -- imap_fetchbody(): Argument #2 ($message_num) must be greater than 0 @@ -48,5 +49,5 @@ Warning: imap_fetchbody(): Bad message number in %s on line %d bool(false) -- $message_num is 1 -- -string(%s) "1: this is a test message, please ignore -%A" +string(%d) "1: this is a test message, please ignore +newline%r\R?%r" diff --git a/ext/imap/tests/imap_fetchheader_basic.phpt b/ext/imap/tests/imap_fetchheader_basic.phpt index 44f7de5a39..dc934e00cf 100644 --- a/ext/imap/tests/imap_fetchheader_basic.phpt +++ b/ext/imap/tests/imap_fetchheader_basic.phpt @@ -2,15 +2,15 @@ Test imap_fetchheader() function : basic function --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_fetchheader() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); // Initialise all required variables -$stream_id = setup_test_mailbox('', 1, $mailbox, 'multiPart'); // setup temp mailbox with 1 msg +$stream_id = setup_test_mailbox('imapfetchheaderbasic', 1, $mailbox, false); // setup temp mailbox with 1 msg $msg_no = 1; $options = array('FT_UID' => FT_UID, 'FT_INTERNAL' => FT_INTERNAL, 'FT_PREFETCHTEXT' => FT_PREFETCHTEXT); @@ -33,12 +33,13 @@ var_dump( imap_fetchheader($stream_id, $msg_no) ); ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchheaderbasic'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_fetchheader() : basic functionality *** Create a temporary mailbox and add 1 msgs -.. mailbox '%s.phpttest' created +New mailbox created -- All possible arguments -- -- Option is FT_UID -- diff --git a/ext/imap/tests/imap_fetchheader_variation3.phpt b/ext/imap/tests/imap_fetchheader_variation3.phpt index a457db0491..1289087b7d 100644 --- a/ext/imap/tests/imap_fetchheader_variation3.phpt +++ b/ext/imap/tests/imap_fetchheader_variation3.phpt @@ -2,7 +2,7 @@ Test imap_fetchheader() function : usage variations - FT_UID option --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -14,10 +14,10 @@ require_once(__DIR__.'/skipif.inc'); echo "*** Testing imap_fetchheader() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); // Initialise required variables -$stream_id = setup_test_mailbox('', 1); // set up temporary mailbox with one simple message +$stream_id = setup_test_mailbox('imapfetchheadervar3', 1); // set up temporary mailbox with one simple message $msg_no = 1; $msg_uid = imap_uid($stream_id, $msg_no); @@ -44,12 +44,13 @@ foreach($flags as $option) { ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchheadervar3'; +require_once(__DIR__ . '/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_fetchheader() : usage variations *** Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created -- Iteration 1 -- FT_UID valid diff --git a/ext/imap/tests/imap_fetchheader_variation5.phpt b/ext/imap/tests/imap_fetchheader_variation5.phpt index cb00986a06..eb6493017b 100644 --- a/ext/imap/tests/imap_fetchheader_variation5.phpt +++ b/ext/imap/tests/imap_fetchheader_variation5.phpt @@ -2,7 +2,7 @@ Test imap_fetchheader() function : usage variations - $message_num argument --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php @@ -13,9 +13,9 @@ require_once(__DIR__.'/skipif.inc'); echo "*** Testing imap_fetchheader() : usage variations ***\n"; -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); -$stream_id = setup_test_mailbox('', 3, $mailbox, 'notSimple'); // set up temp mailbox with 3 msgs +$stream_id = setup_test_mailbox('imapfetchheadervar5', 3, $mailbox, false); // set up temp mailbox with 3 msgs $sequences = [0, /* out of range */ 4, 1]; @@ -33,12 +33,13 @@ imap_errors(); ?> --CLEAN-- <?php -require_once(__DIR__.'/clean.inc'); +$mailbox_suffix = 'imapfetchheadervar5'; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- *** Testing imap_fetchheader() : usage variations *** Create a temporary mailbox and add 3 msgs -.. mailbox '{%s}%s' created +New mailbox created -- $message_num is 0 -- imap_fetchheader(): Argument #2 ($message_num) must be greater than 0 diff --git a/ext/imap/tests/imap_fetchstructure_basic.phpt b/ext/imap/tests/imap_fetchstructure_basic.phpt index 24cd2307dd..2eb730c890 100644 --- a/ext/imap/tests/imap_fetchstructure_basic.phpt +++ b/ext/imap/tests/imap_fetchstructure_basic.phpt @@ -4,13 +4,13 @@ imap_fetchstructure() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = setup_test_mailbox('', 1); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = setup_test_mailbox('imapfetchstructurebasic', 1); try { imap_fetchstructure($stream_id,0); @@ -38,11 +38,12 @@ imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapfetchstructurebasic'; +require_once('setup/clean.inc'); ?> --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created +New mailbox created imap_fetchstructure(): Argument #2 ($message_num) must be greater than 0 bool(true) bool(true) diff --git a/ext/imap/tests/imap_gc_error.phpt b/ext/imap/tests/imap_gc_error.phpt index 5b5b65d271..7c6fa3da84 100644 --- a/ext/imap/tests/imap_gc_error.phpt +++ b/ext/imap/tests/imap_gc_error.phpt @@ -1,18 +1,17 @@ --TEST-- -imap_gc() incorrect parameter count +imap_gc() ValueError --CREDITS-- Paul Sohier #phptestfest utrecht --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = imap_open($default_mailbox, $username, $password) or - die("Cannot connect to mailbox $default_mailbox: " . imap_last_error()); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = setup_test_mailbox('imapgcerror', 1); try { imap_gc($stream_id, -1); @@ -21,5 +20,12 @@ try { } ?> +--CLEAN-- +<?php +$mailbox_suffix = 'imapgcerror'; +require_once(__DIR__.'/setup/clean.inc'); +?> --EXPECT-- +Create a temporary mailbox and add 1 msgs +New mailbox created imap_gc(): Argument #2 ($flags) must be a bitmask of IMAP_GC_TEXTS, IMAP_GC_ELT, and IMAP_GC_ENV diff --git a/ext/imap/tests/imap_getsubscribed_basic.phpt b/ext/imap/tests/imap_getsubscribed_basic.phpt index 8e5d85383d..a1519042f1 100644 --- a/ext/imap/tests/imap_getsubscribed_basic.phpt +++ b/ext/imap/tests/imap_getsubscribed_basic.phpt @@ -4,27 +4,29 @@ imap_getsubscribed() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); if (getenv("SKIP_ASAN")) die("skip asan chokes on this: 'LeakSanitizer does not work under ptrace (strace, gdb, etc)'"); ?> +--CONFLICTS-- +defaultmailbox --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = imap_open($default_mailbox, $username, $password) or - die("Cannot connect to mailbox $default_mailbox: " . imap_last_error()); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD) or + die("Cannot connect to mailbox ". IMAP_DEFAULT_MAILBOX. ": " . imap_last_error()); -var_dump(imap_getsubscribed($stream_id,$default_mailbox,'ezDvfXvbvcxSerz')); +var_dump(imap_getsubscribed($stream_id, IMAP_DEFAULT_MAILBOX, 'ezDvfXvbvcxSerz')); echo "Checking OK\n"; -$newbox = $default_mailbox . "." . $mailbox_prefix; +$newbox = IMAP_DEFAULT_MAILBOX . "." . IMAP_MAILBOX_PHPT_PREFIX; imap_createmailbox($stream_id, $newbox); imap_subscribe($stream_id, $newbox); -$z = imap_getsubscribed($stream_id,$default_mailbox,'*'); +$z = imap_getsubscribed($stream_id, IMAP_DEFAULT_MAILBOX, '*'); var_dump(is_array($z)); var_dump($z[0]); @@ -33,7 +35,8 @@ imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = ''; +require_once(__DIR__ . '/setup/clean.inc'); ?> --EXPECTF-- bool(false) diff --git a/ext/imap/tests/imap_headerinfo_basic.phpt b/ext/imap/tests/imap_headerinfo_basic.phpt index 056a46523c..0d84aee44b 100644 --- a/ext/imap/tests/imap_headerinfo_basic.phpt +++ b/ext/imap/tests/imap_headerinfo_basic.phpt @@ -4,13 +4,13 @@ imap_headerinfo() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = setup_test_mailbox('', 1); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = setup_test_mailbox('imapheaderinfobasic', 1); $z = imap_headerinfo($stream_id, 1); @@ -85,11 +85,12 @@ imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapheaderinfobasic'; +require_once('setup/clean.inc'); ?> --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Check general fields bool(true) bool(true) diff --git a/ext/imap/tests/imap_list_basic.phpt b/ext/imap/tests/imap_list_basic.phpt index addcf70e77..e11c6c1bd0 100644 --- a/ext/imap/tests/imap_list_basic.phpt +++ b/ext/imap/tests/imap_list_basic.phpt @@ -4,20 +4,22 @@ imap_list() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = imap_open($default_mailbox, $username, $password) or - die("Cannot connect to mailbox $default_mailbox: " . imap_last_error()); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD) or + die("Cannot connect to mailbox " .IMAP_DEFAULT_MAILBOX.": " . imap_last_error()); -imap_list($stream_id,$default_mailbox,'ezerz'); +imap_list($stream_id, IMAP_DEFAULT_MAILBOX,'ezerz'); -$z = imap_list($stream_id,$default_mailbox,'*'); +$z = imap_list($stream_id, IMAP_DEFAULT_MAILBOX,'*'); var_dump(is_array($z)); + +// e.g. "{127.0.0.1:143/norsh}INBOX" var_dump($z[0]); imap_close($stream_id); diff --git a/ext/imap/tests/imap_lsub_basic.phpt b/ext/imap/tests/imap_lsub_basic.phpt index 3cd4722e1f..2fff7eeac8 100644 --- a/ext/imap/tests/imap_lsub_basic.phpt +++ b/ext/imap/tests/imap_lsub_basic.phpt @@ -4,36 +4,41 @@ imap_lsub() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); if (getenv("SKIP_ASAN")) die("skip leak sanitizer crashes"); ?> +--CONFLICTS-- +defaultmailbox --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = imap_open($default_mailbox, $username, $password) or - die("Cannot connect to mailbox $default_mailbox: " . imap_last_error()); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD) or + die("Cannot connect to mailbox " .IMAP_DEFAULT_MAILBOX. ": " . imap_last_error()); -var_dump(imap_lsub($stream_id,$default_mailbox,'ezDvfXvbvcxSerz')); +var_dump(imap_lsub($stream_id, IMAP_DEFAULT_MAILBOX, 'ezDvfXvbvcxSerz')); echo "Checking OK\n"; -$newbox = $default_mailbox . "." . $mailbox_prefix; +$newbox = IMAP_DEFAULT_MAILBOX . "." . IMAP_MAILBOX_PHPT_PREFIX; imap_createmailbox($stream_id, $newbox); imap_subscribe($stream_id, $newbox); -$z = imap_lsub($stream_id,$default_mailbox,'*'); +$z = imap_lsub($stream_id, IMAP_DEFAULT_MAILBOX, '*'); var_dump(is_array($z)); + +// e.g. "{127.0.0.1:143/norsh}INBOX.phpttest" var_dump($z[0]); imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = ''; +require_once(__DIR__.'/setup/clean.inc'); ?> --EXPECTF-- bool(false) diff --git a/ext/imap/tests/imap_mail_copy_basic.phpt b/ext/imap/tests/imap_mail_copy_basic.phpt index 25725478a6..312c8198a6 100644 --- a/ext/imap/tests/imap_mail_copy_basic.phpt +++ b/ext/imap/tests/imap_mail_copy_basic.phpt @@ -4,36 +4,33 @@ Test imap_mail_copy() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_mail_copy() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); - +require_once(__DIR__.'/setup/imap_include.inc'); echo "Create a new mailbox for test\n"; -$imap_stream = setup_test_mailbox("", 1); -if (!is_resource($imap_stream)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} +$imap_stream = setup_test_mailbox('copybasic', 1); $check = imap_check($imap_stream); echo "Msg Count in new mailbox: ". $check->Nmsgs . "\n"; -var_dump(imap_mail_copy($imap_stream, '1', 'INBOX.'.$mailbox_prefix)); +var_dump(imap_mail_copy($imap_stream, '1', 'INBOX.' . IMAP_MAILBOX_PHPT_PREFIX . 'copybasic')); imap_close($imap_stream); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'copybasic'; +require_once('setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_mail_copy() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 1 msgs -.. mailbox '%s' created +New mailbox created Msg Count in new mailbox: 1 bool(true) diff --git a/ext/imap/tests/imap_mail_move_basic.phpt b/ext/imap/tests/imap_mail_move_basic.phpt index 3988951f12..3cd347b627 100644 --- a/ext/imap/tests/imap_mail_move_basic.phpt +++ b/ext/imap/tests/imap_mail_move_basic.phpt @@ -4,36 +4,33 @@ Test imap_mail_move() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php echo "*** Testing imap_mail_move() : basic functionality ***\n"; -require_once(__DIR__.'/imap_include.inc'); - +require_once(__DIR__.'/setup/imap_include.inc'); echo "Create a new mailbox for test\n"; -$imap_stream = setup_test_mailbox("", 1); -if (!is_resource($imap_stream)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} +$imap_stream = setup_test_mailbox("movebasic", 1); $check = imap_check($imap_stream); echo "Msg Count in new mailbox: ". $check->Nmsgs . "\n"; -var_dump(imap_mail_move($imap_stream, '1', 'INBOX.'.$mailbox_prefix)); +var_dump(imap_mail_move($imap_stream, '1', 'INBOX.' . IMAP_MAILBOX_PHPT_PREFIX . 'movebasic')); imap_close($imap_stream); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'movebasic'; +require_once(__DIR__.'/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- *** Testing imap_mail_move() : basic functionality *** Create a new mailbox for test Create a temporary mailbox and add 1 msgs -.. mailbox '%s' created +New mailbox created Msg Count in new mailbox: 1 bool(true) diff --git a/ext/imap/tests/imap_mutf7_to_utf8.phpt b/ext/imap/tests/imap_mutf7_to_utf8.phpt index f45361f4a9..835a25428f 100644 --- a/ext/imap/tests/imap_mutf7_to_utf8.phpt +++ b/ext/imap/tests/imap_mutf7_to_utf8.phpt @@ -2,7 +2,6 @@ imap_mutf7_to_utf8 --SKIPIF-- <?php if (!extension_loaded("imap")) print "skip"; ?> -<?php if (!function_exists("imap_mutf7_to_utf8")) print "skip"; ?> --FILE-- <?php diff --git a/ext/imap/tests/imap_open_error.phpt b/ext/imap/tests/imap_open_error.phpt index be1063fadc..5ef4a2918d 100644 --- a/ext/imap/tests/imap_open_error.phpt +++ b/ext/imap/tests/imap_open_error.phpt @@ -5,7 +5,7 @@ Paul Sohier #phptestfest utrecht --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); if (getenv("SKIP_ASAN")) die("skip leak sanitizer crashes"); ?> --FILE-- @@ -20,10 +20,8 @@ try { echo $e->getMessage() . \PHP_EOL; } -require_once(__DIR__.'/imap_include.inc'); - try { - imap_open($default_mailbox, $username, $password, NIL, -1); + imap_open('', '', '', NIL, -1); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } diff --git a/ext/imap/tests/imap_renamemailbox_basic.phpt b/ext/imap/tests/imap_renamemailbox_basic.phpt index c6b1812d16..05f1e4a309 100644 --- a/ext/imap/tests/imap_renamemailbox_basic.phpt +++ b/ext/imap/tests/imap_renamemailbox_basic.phpt @@ -4,20 +4,16 @@ imap_renamemailbox() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); +require_once(__DIR__.'/setup/imap_include.inc'); -$stream_id = setup_test_mailbox('', 1); +$stream_id = setup_test_mailbox('imaprenamemailbox1', 1); -if (!is_resource($stream_id)) { - exit("TEST FAILED: Unable to create test mailbox\n"); -} - -$newbox = $default_mailbox . "." . $mailbox_prefix; +$mailboxBaseName = IMAP_DEFAULT_MAILBOX . '.' . IMAP_MAILBOX_PHPT_PREFIX; //commented because of bug #49901 //$ancError = error_reporting(0); @@ -26,19 +22,17 @@ $newbox = $default_mailbox . "." . $mailbox_prefix; //error_reporting($ancError); echo "Checking OK\n"; - -var_dump(imap_createmailbox($stream_id, $newbox.'.test')); -var_dump(imap_renamemailbox($stream_id, $newbox.'.test', $newbox.'.testd')); +var_dump(imap_renamemailbox($stream_id, $mailboxBaseName . 'imaprenamemailbox1', $mailboxBaseName . 'imaprenamemailbox2')); imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = ['imaprenamemailbox1', 'imaprenamemailbox2']; +require_once('setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Checking OK bool(true) -bool(true) diff --git a/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt b/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt index 87dc4aaf05..fd2dfb939d 100644 --- a/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt +++ b/ext/imap/tests/imap_rfc822_parse_headers_basic.phpt @@ -4,13 +4,13 @@ imap_rfc822_parse_headers() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = setup_test_mailbox('', 1); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = setup_test_mailbox('imaprfc822parseheadersbasic', 1); $z = imap_headerinfo($stream_id, 1); @@ -85,11 +85,12 @@ imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imaprfc822parseheadersbasic'; +require_once(__DIR__ . '/setup/clean.inc'); ?> --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created Check general fields bool(true) bool(true) diff --git a/ext/imap/tests/imap_savebody_basic.phpt b/ext/imap/tests/imap_savebody_basic.phpt index ccbaa1ba66..38be6ab4a0 100644 --- a/ext/imap/tests/imap_savebody_basic.phpt +++ b/ext/imap/tests/imap_savebody_basic.phpt @@ -4,13 +4,13 @@ imap_savebody() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = setup_test_mailbox('', 1); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = setup_test_mailbox('imapsavebodybasic', 1); $file = __DIR__.'/tmpsavebody.txt'; @@ -31,11 +31,12 @@ imap_close($stream_id); --CLEAN-- <?php @unlink(__DIR__.'/tmpsavebody.txt'); -require_once('clean.inc'); +$mailbox_suffix = 'imapsavebodybasic'; +require_once(__DIR__ . '/setup/clean.inc'); ?> --EXPECTF-- Create a temporary mailbox and add 1 msgs -.. mailbox '{127.0.0.1:143/norsh}INBOX.phpttest' created +New mailbox created bool(true) Size: %d bool(true) diff --git a/ext/imap/tests/imap_timeout_basic.phpt b/ext/imap/tests/imap_timeout_basic.phpt index f9618c3e3a..e449c3fdec 100644 --- a/ext/imap/tests/imap_timeout_basic.phpt +++ b/ext/imap/tests/imap_timeout_basic.phpt @@ -4,7 +4,7 @@ imap_timeout() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php diff --git a/ext/imap/tests/imap_undelete_basic.phpt b/ext/imap/tests/imap_undelete_basic.phpt index 7cc9ff3847..b792fd093e 100644 --- a/ext/imap/tests/imap_undelete_basic.phpt +++ b/ext/imap/tests/imap_undelete_basic.phpt @@ -4,13 +4,13 @@ imap_undelete() function : basic functionality Olivier Doucet --SKIPIF-- <?php -require_once(__DIR__.'/skipif.inc'); +require_once(__DIR__.'/setup/skipif.inc'); ?> --FILE-- <?php -require_once(__DIR__.'/imap_include.inc'); -$stream_id = setup_test_mailbox('', 1); +require_once(__DIR__.'/setup/imap_include.inc'); +$stream_id = setup_test_mailbox('imapundeletebasic', 1); imap_delete($stream_id, 1); @@ -21,9 +21,10 @@ imap_close($stream_id); ?> --CLEAN-- <?php -require_once('clean.inc'); +$mailbox_suffix = 'imapundeletebasic'; +require_once(__DIR__ . '/setup/clean.inc'); ?> ---EXPECTF-- +--EXPECT-- Create a temporary mailbox and add 1 msgs -.. mailbox '{%s}%s' created +New mailbox created bool(true) diff --git a/ext/imap/tests/imap_utf8.phpt b/ext/imap/tests/imap_utf8.phpt index a82c3721c3..522d4d6f56 100644 --- a/ext/imap/tests/imap_utf8.phpt +++ b/ext/imap/tests/imap_utf8.phpt @@ -11,8 +11,8 @@ var_dump(imap_utf8("test")); echo "Done\n"; ?> ---EXPECTF-- +--EXPECT-- string(0) "" string(1) "1" -string(4) "%s" +string(4) "test" Done diff --git a/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt b/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt index 8037ae9491..c0f3b06dc9 100644 --- a/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt +++ b/ext/imap/tests/imap_utf8_to_mutf7_basic.phpt @@ -2,7 +2,6 @@ imap_utf8_to_mutf7 --SKIPIF-- <?php if (!extension_loaded("imap")) print "skip imap extension not loaded"; ?> -<?php if (!function_exists("imap_utf8_to_mutf7")) print "skip imap_utf8_to_mutf7() not available"; ?> --FILE-- <?php diff --git a/ext/imap/tests/setup/clean.inc b/ext/imap/tests/setup/clean.inc new file mode 100644 index 0000000000..608d553b4f --- /dev/null +++ b/ext/imap/tests/setup/clean.inc @@ -0,0 +1,32 @@ +<?php +require_once 'imap_include.inc'; + +if (!isset($mailbox_suffix)) { throw new Exception("No suffix provided"); } + +$imap_stream = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD); + +// delete all msgs in default mailbox, i.e INBOX +$check = imap_check($imap_stream); +for ($i = 1; $i <= $check->Nmsgs; $i++) { + imap_delete($imap_stream, $i); +} + + +$mailboxes = imap_getmailboxes($imap_stream, IMAP_SERVER, '*'); + +if (!is_array($mailbox_suffix)) { + $mailbox_suffixes = [$mailbox_suffix]; +} else { + $mailbox_suffixes = $mailbox_suffix; +} + +foreach ($mailbox_suffixes as $mailbox_suffix) { + foreach($mailboxes as $value) { + // Only delete mailbox with our prefix (+ optional test suffix) + if (preg_match('/\{.*?\}INBOX\.' . IMAP_MAILBOX_PHPT_PREFIX . $mailbox_suffix .'$/', $value->name, $match) == 1) { + imap_deletemailbox($imap_stream, $value->name); + } + } +} + +imap_close($imap_stream, CL_EXPUNGE); diff --git a/ext/imap/tests/dovecot.conf b/ext/imap/tests/setup/dovecot.conf index c465ba3ce9..c465ba3ce9 100644 --- a/ext/imap/tests/dovecot.conf +++ b/ext/imap/tests/setup/dovecot.conf diff --git a/ext/imap/tests/dovecotpass b/ext/imap/tests/setup/dovecotpass index 86a069fc4f..86a069fc4f 100644 --- a/ext/imap/tests/dovecotpass +++ b/ext/imap/tests/setup/dovecotpass diff --git a/ext/imap/tests/imap_include.inc b/ext/imap/tests/setup/imap_include.inc index e57d651697..33e4e5ca16 100644 --- a/ext/imap/tests/imap_include.inc +++ b/ext/imap/tests/setup/imap_include.inc @@ -1,31 +1,34 @@ <?php -// Change these to make tests run successfully -$server = '{127.0.0.1:143/norsh}'; -$default_mailbox = $server . "INBOX"; -$domain = "something.com"; -$admin_user = "webmaster"; // a user with admin access -$username = "$admin_user@$domain"; -$password = 'p4ssw0rd'; -$users = array("webmaster", "info", "admin", "foo"); // tests require 4 valid userids -$mailbox_prefix = "phpttest"; // name used for test mailbox +/** If required change these values to make the test runs */ +const IMAP_SERVER_NO_DEBUG = '{127.0.0.1:143/norsh}'; +const IMAP_SERVER_DEBUG = '{127.0.0.1:143/debug/norsh}'; +const IMAP_SERVER = IMAP_SERVER_DEBUG; +const IMAP_DEFAULT_MAILBOX = IMAP_SERVER . 'INBOX'; +const IMAP_MAIL_DOMAIN = 'something.com'; +const IMAP_ADMIN_USER = 'webmaster'; // a user with admin access +const IMAP_MAILBOX_USERNAME = IMAP_ADMIN_USER . '@' . IMAP_MAIL_DOMAIN; +const IMAP_MAILBOX_PASSWORD = 'p4ssw0rd'; +const IMAP_MAILBOX_PHPT_PREFIX = 'phpttest'; +/** Tests require 4 valid userids */ +const IMAP_USERS = ["webmaster", "info", "admin", "foo"]; + +/** list of fields to expect */ +const MANDATORY_OVERVIEW_FIELDS = [ + 'size', + 'uid', + 'msgno', + 'recent', + 'flagged', + 'answered', + 'deleted', + 'seen', + 'draft', + 'udate', +]; // record test start time (used by displayOverviewFields()) $start_time = time(); -// list of fields to expect -$mandatory_overview_fields = array( - 'size', - 'uid', - 'msgno', - 'recent', - 'flagged', - 'answered', - 'deleted', - 'seen', - 'draft', - 'udate', - ); - /** * Display all fields in an element from an imap_fetch_overview() response * @@ -33,25 +36,23 @@ $mandatory_overview_fields = array( * server with its clock synced to the current system, which is consistent with * setup instructions in ext/imap/tests/README.md * - * @param array resp element from the return value of imap_fetch_overview() + * @param $resp + * @param string[] $fields */ -function displayOverviewFields($resp, $fields=null) { - global $mandatory_overview_fields; - global $start_time; - - foreach ($fields ? $fields : $mandatory_overview_fields as $mf) - { - $z = $resp->$mf; - if ($mf == 'udate') { - if (($z >= $start_time) && ($z <= time())) { - echo "$mf is OK\n"; - } else { - echo "$mf is BAD ($z)\n"; - } - } else { - echo "$mf is $z\n"; +function displayOverviewFields($resp, array $fields = MANDATORY_OVERVIEW_FIELDS) { + global $start_time; + foreach ($fields as $mf) { + $z = $resp->$mf; + if ($mf == 'udate') { + if (($z >= $start_time) && ($z <= time())) { + echo "$mf is OK\n"; + } else { + echo "$mf is BAD ($z)\n"; + } + } else { + echo "$mf is $z\n"; + } } - } } @@ -60,33 +61,27 @@ function displayOverviewFields($resp, $fields=null) { * * @param string mailbox_suffix Suffix used to uniquely identify mailboxes * @param int message_count number of test msgs to be written to new mailbox - * - * @return IMAP stream to new mailbox on success; FALSE on failure + * @param null $new_mailbox + * @param bool $simpleMessages + * @return resource IMAP stream to new mailbox + * @throws Exception */ -function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = null, $msg_type = "simple"){ - global $server, $default_mailbox, $username, $password; - +function setup_test_mailbox(string $mailbox_suffix, int $message_count, &$new_mailbox = null, bool $simpleMessages = true){ // open a stream to default mailbox - $imap_stream = imap_open($default_mailbox, $username, $password); + $imap_stream = imap_open(IMAP_DEFAULT_MAILBOX, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD); if ($imap_stream === false) { - echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n"; - return false; + throw new Exception("Cannot connect to IMAP server " . IMAP_SERVER . ": " . imap_last_error()); } echo "Create a temporary mailbox and add " . $message_count . " msgs\n"; - $new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type); - if ($new_mailbox === false) { - echo "Can't create a temporary mailbox: " . imap_last_error(). "\n"; - return false; - } + $new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $simpleMessages); - echo ".. mailbox '$new_mailbox' created\n"; + echo "New mailbox created\n"; // reopen stream to new mailbox if (imap_reopen($imap_stream, $new_mailbox) === false) { - echo "can't re-open '$new_mailbox' mailbox: " . imap_last_error() . "\n"; - return false; + throw new Exception("Can't re-open '$new_mailbox' mailbox: " . imap_last_error()); } return $imap_stream; @@ -96,11 +91,14 @@ function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = nul * Create mailbox and fill with generic emails * * @param resource $imap_stream - * @param string $mailbox + * @param string $mailbox_suffix + * @param int $message_count + * @param bool $simpleMessages + * @return string + * @throws Exception */ -function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type= "simple"){ - global $default_mailbox, $mailbox_prefix; - $mailbox = $default_mailbox . "." . $mailbox_prefix . $mailbox_suffix; +function create_mailbox($imap_stream, string $mailbox_suffix, int $message_count, bool $simpleMessages = true): string { + $mailbox = IMAP_DEFAULT_MAILBOX . '.' . IMAP_MAILBOX_PHPT_PREFIX . $mailbox_suffix; $mailboxes = imap_getmailboxes($imap_stream, $mailbox, '*'); @@ -108,18 +106,18 @@ function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type if ($mailboxes) { foreach($mailboxes as $value) { if ($value->name == $mailbox) { - exit ("TEST FAILED : Mailbox '$mailbox' already exists\n"); + throw new Exception("Mailbox '$mailbox' already exists"); } } } if (imap_createmailbox($imap_stream, $mailbox) === false) { - return false; + throw new Exception("Can't create a temporary mailbox: " . imap_last_error()); } // Add number of test msgs requested if ($message_count > 0) { - populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type); + populate_mailbox($imap_stream, $mailbox, $message_count, $simpleMessages); } return $mailbox; @@ -130,21 +128,20 @@ function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type * * @param resource $imap_stream * @param string $mailbox + * @param int $message_count + * @param bool $simpleMessages */ -function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "simple"){ - - global $users, $domain; - - for($i = 1; $i <= $message_count; $i++) { - if ($msg_type == "simple") { +function populate_mailbox($imap_stream, string $mailbox, int $message_count, bool $simpleMessages = true): void { + for ($i = 1; $i <= $message_count; $i++) { + if ($simpleMessages) { $msg = "From: foo@anywhere.com\r\n" - . "To: $users[0]@$domain\r\n" + . "To: ". IMAP_USERS[0] . "@" . IMAP_MAIL_DOMAIN . "\r\n" . "Subject: test$i\r\n" . "\r\n" - . "$i: this is a test message, please ignore\r\n"; + . "$i: this is a test message, please ignore\r\nnewline"; } else { $envelope["from"]= "foo@anywhere.com"; - $envelope["to"] = "$users[0]@$domain"; + $envelope["to"] = IMAP_USERS[0] . "@" . IMAP_MAIL_DOMAIN; $envelope["subject"] = "Test msg $i"; $part1["type"] = TYPEMULTIPART; @@ -181,16 +178,13 @@ function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "s * Get the mailbox name from a mailbox description, i.e strip off server details. * * @param string mailbox complete mailbox name - * @return mailbox name + * @return string mailbox name */ -function get_mailbox_name($mailbox){ +function get_mailbox_name(string $mailboxName): string { - if (preg_match('/\{.*?\}(.*)/', $mailbox, $match) != 1) { - echo "Unrecpognized mailbox name\n"; - return false; + if (preg_match('/\{.*?\}(.*)/', $mailboxName, $match) != 1) { + throw new Exception("Unrecognized mailbox name '$mailboxName'"); } return $match[1]; } - -?> diff --git a/ext/imap/tests/setup.sh b/ext/imap/tests/setup/setup.sh index 5cb18334a3..efa7c30310 100644 --- a/ext/imap/tests/setup.sh +++ b/ext/imap/tests/setup/setup.sh @@ -1,6 +1,6 @@ sudo service dovecot stop sudo groupadd -g 5000 vmail sudo useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail -sudo cp ext/imap/tests/dovecot.conf /etc/dovecot/dovecot.conf -sudo cp ext/imap/tests/dovecotpass /etc/dovecot/dovecotpass +sudo cp ext/imap/tests/setup/dovecot.conf /etc/dovecot/dovecot.conf +sudo cp ext/imap/tests/setup/dovecotpass /etc/dovecot/dovecotpass sudo service dovecot start diff --git a/ext/imap/tests/setup/skipif.inc b/ext/imap/tests/setup/skipif.inc new file mode 100644 index 0000000000..c7dc24efd7 --- /dev/null +++ b/ext/imap/tests/setup/skipif.inc @@ -0,0 +1,13 @@ +<?php +extension_loaded('imap') or die('skip imap extension not available in this build'); + +include __DIR__ . '/imap_include.inc'; + +$options = OP_HALFOPEN; // this should be enough to verify server present +$retries = 0; // don't retry connect on failure + +$mbox = @imap_open(IMAP_SERVER, IMAP_MAILBOX_USERNAME, IMAP_MAILBOX_PASSWORD, $options, $retries); +if (!$mbox) { + die("skip could not connect to mailbox " . IMAP_SERVER); +} +imap_close($mbox); diff --git a/ext/imap/tests/skipif.inc b/ext/imap/tests/skipif.inc deleted file mode 100644 index 2167ad1d0c..0000000000 --- a/ext/imap/tests/skipif.inc +++ /dev/null @@ -1,16 +0,0 @@ -<?php -extension_loaded('imap') or die('skip imap extension not available in this build'); - -// Change these to make tests run successfully -$mailbox = '{127.0.0.1:143/debug/norsh}'; -$username = 'webmaster@something.com'; -$password = 'p4ssw0rd'; -$options = OP_HALFOPEN; // this should be enough to verify server present -$retries = 0; // don't retry connect on failure - -$mbox = @imap_open($mailbox, $username, $password, $options, $retries); -if (!$mbox) { - die("skip could not connect to mailbox $mailbox"); -} -imap_close($mbox); -?> diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4 index 74266e4166..9547130fba 100644 --- a/ext/mbstring/config.m4 +++ b/ext/mbstring/config.m4 @@ -94,18 +94,10 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ PHP_MBSTRING_ADD_SOURCES([ libmbfl/filters/html_entities.c libmbfl/filters/mbfilter_7bit.c - libmbfl/filters/mbfilter_ascii.c libmbfl/filters/mbfilter_base64.c libmbfl/filters/mbfilter_big5.c - libmbfl/filters/mbfilter_byte2.c - libmbfl/filters/mbfilter_byte4.c - libmbfl/filters/mbfilter_cp1251.c - libmbfl/filters/mbfilter_cp1252.c - libmbfl/filters/mbfilter_cp1254.c libmbfl/filters/mbfilter_cp5022x.c libmbfl/filters/mbfilter_cp51932.c - libmbfl/filters/mbfilter_cp850.c - libmbfl/filters/mbfilter_cp866.c libmbfl/filters/mbfilter_cp932.c libmbfl/filters/mbfilter_cp936.c libmbfl/filters/mbfilter_gb18030.c @@ -121,24 +113,9 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/filters/mbfilter_iso2022jp_2004.c libmbfl/filters/mbfilter_iso2022jp_mobile.c libmbfl/filters/mbfilter_iso2022_kr.c - libmbfl/filters/mbfilter_iso8859_1.c - libmbfl/filters/mbfilter_iso8859_10.c - libmbfl/filters/mbfilter_iso8859_13.c - libmbfl/filters/mbfilter_iso8859_14.c - libmbfl/filters/mbfilter_iso8859_15.c - libmbfl/filters/mbfilter_iso8859_16.c - libmbfl/filters/mbfilter_iso8859_2.c - libmbfl/filters/mbfilter_iso8859_3.c - libmbfl/filters/mbfilter_iso8859_4.c - libmbfl/filters/mbfilter_iso8859_5.c - libmbfl/filters/mbfilter_iso8859_6.c - libmbfl/filters/mbfilter_iso8859_7.c - libmbfl/filters/mbfilter_iso8859_8.c - libmbfl/filters/mbfilter_iso8859_9.c libmbfl/filters/mbfilter_jis.c - libmbfl/filters/mbfilter_koi8r.c - libmbfl/filters/mbfilter_armscii8.c libmbfl/filters/mbfilter_qprint.c + libmbfl/filters/mbfilter_singlebyte.c libmbfl/filters/mbfilter_sjis.c libmbfl/filters/mbfilter_sjis_open.c libmbfl/filters/mbfilter_sjis_mobile.c @@ -155,7 +132,6 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/filters/mbfilter_utf8.c libmbfl/filters/mbfilter_utf8_mobile.c libmbfl/filters/mbfilter_uuencode.c - libmbfl/filters/mbfilter_koi8u.c libmbfl/mbfl/mbfilter.c libmbfl/mbfl/mbfilter_8bit.c libmbfl/mbfl/mbfilter_pass.c @@ -163,7 +139,6 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/mbfl/mbfl_convert.c libmbfl/mbfl/mbfl_encoding.c libmbfl/mbfl/mbfl_filter_output.c - libmbfl/mbfl/mbfl_ident.c libmbfl/mbfl/mbfl_language.c libmbfl/mbfl/mbfl_memory_device.c libmbfl/mbfl/mbfl_string.c @@ -179,7 +154,7 @@ AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ libmbfl/nls/nls_tr.c libmbfl/nls/nls_ua.c ]) - PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) + PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) ]) dnl diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32 index 667fdb9222..8a9eadf41b 100644 --- a/ext/mbstring/config.w32 +++ b/ext/mbstring/config.w32 @@ -17,37 +17,30 @@ if (PHP_MBSTRING != "no") { "ext\\mbstring\\libmbfl\\config.h", true); ADD_SOURCES("ext/mbstring/libmbfl/filters", "html_entities.c \ - mbfilter_7bit.c mbfilter_ascii.c mbfilter_base64.c mbfilter_big5.c \ - mbfilter_byte2.c mbfilter_byte4.c mbfilter_cp1251.c mbfilter_cp1252.c \ - mbfilter_cp866.c mbfilter_cp932.c mbfilter_cp936.c mbfilter_cp51932.c \ - mbfilter_euc_cn.c mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ + mbfilter_7bit.c mbfilter_base64.c mbfilter_big5.c mbfilter_cp932.c \ + mbfilter_cp936.c mbfilter_cp51932.c mbfilter_euc_cn.c \ + mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ mbfilter_euc_tw.c mbfilter_htmlent.c mbfilter_hz.c mbfilter_iso2022_kr.c \ - mbfilter_iso8859_1.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c \ - mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_iso8859_16.c \ - mbfilter_iso8859_2.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c \ - mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c \ - mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_jis.c \ - mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c mbfilter_sjis_2004.c \ - mbfilter_koi8r.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ + mbfilter_jis.c mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c \ + mbfilter_sjis_2004.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ mbfilter_ucs4.c mbfilter_uhc.c mbfilter_utf16.c mbfilter_utf32.c \ - mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c mbfilter_utf8_mobile.c \ - mbfilter_koi8u.c mbfilter_cp1254.c mbfilter_euc_jp_2004.c \ - mbfilter_uuencode.c mbfilter_armscii8.c mbfilter_cp850.c \ + mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c \ + mbfilter_utf8_mobile.c mbfilter_euc_jp_2004.c mbfilter_uuencode.c \ mbfilter_cp5022x.c mbfilter_sjis_open.c mbfilter_sjis_mobile.c \ - mbfilter_sjis_mac.c \ - mbfilter_iso2022jp_2004.c mbfilter_iso2022jp_mobile.c \ + mbfilter_sjis_mac.c mbfilter_iso2022jp_2004.c \ + mbfilter_iso2022jp_mobile.c mbfilter_singlebyte.c \ mbfilter_tl_jisx0201_jisx0208.c", "mbstring"); ADD_SOURCES("ext/mbstring/libmbfl/mbfl", "mbfilter.c mbfilter_8bit.c \ mbfilter_pass.c mbfilter_wchar.c mbfl_convert.c mbfl_encoding.c \ - mbfl_filter_output.c mbfl_ident.c mbfl_language.c mbfl_memory_device.c \ + mbfl_filter_output.c mbfl_language.c mbfl_memory_device.c \ mbfl_string.c", "mbstring"); ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c \ nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \ nls_ua.c nls_tr.c", "mbstring"); - PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); + PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support'); diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c index 42ed23326d..bdf0cc78d9 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c @@ -75,6 +75,8 @@ int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < 0x80) { CK((*filter->output_function)(c, filter->data)); + } else { + mbfl_filt_conv_illegal_output(c, filter); } return c; } diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c deleted file mode 100644 index 38c8f98bd1..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: Hayk Chamyan <hamshen@gmail.com> - * - */ - -/* - * "armenian code filter and converter" - */ - -#include "mbfilter.h" -#include "mbfilter_armscii8.h" -#include "unicode_table_armscii8.h" - -static int mbfl_filt_ident_armscii8(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_armscii8_aliases[] = {"ArmSCII-8", "ArmSCII8", "ARMSCII-8", "ARMSCII8", NULL}; - -const mbfl_encoding mbfl_encoding_armscii8 = { - mbfl_no_encoding_armscii8, - "ArmSCII-8", - "ArmSCII-8", - (const char *(*)[])&mbfl_encoding_armscii8_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_armscii8_wchar, - &vtbl_wchar_armscii8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_armscii8 = { - mbfl_no_encoding_armscii8, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_armscii8 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_armscii8 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_armscii8, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_armscii8, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_armscii8_wchar = { - mbfl_no_encoding_armscii8, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_armscii8_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * armscii8 => wchar - */ -int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < armscii8_ucs_table_min) { - s = c; - } else if (c >= armscii8_ucs_table_min && c < 0x100) { - s = armscii8_ucs_table[c - armscii8_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_ARMSCII8; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => armscii8 - */ -int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter) -{ - - int s, n; - - if (c >= 0x28 && c < 0x30) { - s = ucs_armscii8_table[c-0x28]; - } else if (c < armscii8_ucs_table_min) { - s = c; - } else { - s = -1; - n = armscii8_ucs_table_len-1; - while (n >= 0) { - if (c == armscii8_ucs_table[n]) { - s = armscii8_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_ARMSCII8) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_armscii8(int c, mbfl_identify_filter *filter) -{ - if (c >= armscii8_ucs_table_min && c <= 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h deleted file mode 100644 index 0b14934995..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: Hayk Chamyan <hamshen@gmail.com> - * - */ - -#ifndef MBFL_MBFILTER_ARMSCII8_H -#define MBFL_MBFILTER_ARMSCII8_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_armscii8; -extern const struct mbfl_identify_vtbl vtbl_identify_armscii8; -extern const struct mbfl_convert_vtbl vtbl_wchar_armscii8; -extern const struct mbfl_convert_vtbl vtbl_armscii8_wchar; - -int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ARMSCII8_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c deleted file mode 100644 index 43d659a46c..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include "mbfilter.h" -#include "mbfilter_ascii.h" - -static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL}; - -const mbfl_encoding mbfl_encoding_ascii = { - mbfl_no_encoding_ascii, - "ASCII", - "US-ASCII", /* preferred MIME name */ - (const char *(*)[])&mbfl_encoding_ascii_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_ascii_wchar, - &vtbl_wchar_ascii -}; - -const struct mbfl_identify_vtbl vtbl_identify_ascii = { - mbfl_no_encoding_ascii, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_ascii -}; - -const struct mbfl_convert_vtbl vtbl_ascii_wchar = { - mbfl_no_encoding_ascii, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_ascii_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_ascii = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_ascii, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_ascii, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ASCII => wchar - */ -int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter) -{ - return (*filter->output_function)(c, filter->data); -} - - -/* - * wchar => ASCII - */ -int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter) -{ - if (c >= 0 && c < 0x80) { - CK((*filter->output_function)(c, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x20 && c < 0x80) { - ; - } else if (c == 0x0d || c == 0x0a || c == 0x09 || c == 0) { /* CR or LF or HTAB or null */ - ; - } else { - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h b/ext/mbstring/libmbfl/filters/mbfilter_ascii.h deleted file mode 100644 index 3c8aead9ef..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#ifndef MBFL_MBFILTER_ASCII_H -#define MBFL_MBFILTER_ASCII_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_ascii; -extern const struct mbfl_identify_vtbl vtbl_identify_ascii; -extern const struct mbfl_convert_vtbl vtbl_ascii_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_ascii; - -int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ASCII_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.c b/ext/mbstring/libmbfl/filters/mbfilter_big5.c index 1e59924092..110150134c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_big5.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.c @@ -32,8 +32,6 @@ #include "unicode_table_big5.h" -static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_big5[] = { /* 0x81-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,7 +57,7 @@ const mbfl_encoding mbfl_encoding_big5 = { mbfl_no_encoding_big5, "BIG-5", "BIG5", - (const char *(*)[])&mbfl_encoding_big5_aliases, + mbfl_encoding_big5_aliases, mblen_table_big5, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_big5_wchar, @@ -77,18 +75,6 @@ const mbfl_encoding mbfl_encoding_cp950 = { &vtbl_wchar_cp950 }; -const struct mbfl_identify_vtbl vtbl_identify_big5 = { - mbfl_no_encoding_big5, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_big5 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp950 = { - mbfl_no_encoding_cp950, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_big5 -}; - const struct mbfl_convert_vtbl vtbl_big5_wchar = { mbfl_no_encoding_big5, mbfl_no_encoding_wchar, @@ -322,28 +308,3 @@ mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter) -{ - int c1; - if (filter->encoding->no_encoding == mbfl_no_encoding_cp950) { - c1 = 0x80; - } else { - c1 = 0xa0; - } - - if (filter->status) { /* kanji second char */ - if (c < 0x40 || (c > 0x7e && c < 0xa1) ||c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > c1 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.h b/ext/mbstring/libmbfl/filters/mbfilter_big5.h index c5a0955f8d..e475b6bd0c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_big5.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.h @@ -33,12 +33,10 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_big5; -extern const struct mbfl_identify_vtbl vtbl_identify_big5; extern const struct mbfl_convert_vtbl vtbl_big5_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_big5; extern const mbfl_encoding mbfl_encoding_cp950; -extern const struct mbfl_identify_vtbl vtbl_identify_cp950; extern const struct mbfl_convert_vtbl vtbl_cp950_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp950; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c b/ext/mbstring/libmbfl/filters/mbfilter_byte2.c deleted file mode 100644 index 72b5b2b7b2..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include "mbfilter.h" -#include "mbfilter_byte2.h" - -const mbfl_encoding mbfl_encoding_byte2be = { - mbfl_no_encoding_byte2be, - "byte2be", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte2be_wchar, - &vtbl_wchar_byte2be -}; - -const mbfl_encoding mbfl_encoding_byte2le = { - mbfl_no_encoding_byte2le, - "byte2le", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte2le_wchar, - &vtbl_wchar_byte2le -}; - -const struct mbfl_convert_vtbl vtbl_byte2be_wchar = { - mbfl_no_encoding_byte2be, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte2be_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte2be = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte2be, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte2be, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_byte2le_wchar = { - mbfl_no_encoding_byte2le, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte2le_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte2le = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte2le, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte2le, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff) << 8; - filter->cache = n; - } else { - filter->status = 0; - n = (c & 0xff) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)(c & 0xff, filter->data)); - return c; -} - -int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = c & 0xff; - filter->cache = n; - } else { - filter->status = 0; - n = ((c & 0xff) << 8) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)(c & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h b/ext/mbstring/libmbfl/filters/mbfilter_byte2.h deleted file mode 100644 index 8b1d991810..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#ifndef MBFL_MBFILTER_BYTE2_H -#define MBFL_MBFILTER_BYTE2_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_byte2be; -extern const mbfl_encoding mbfl_encoding_byte2le; -extern const struct mbfl_convert_vtbl vtbl_byte2be_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte2be; -extern const struct mbfl_convert_vtbl vtbl_byte2le_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte2le; - -int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_BYTE2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c b/ext/mbstring/libmbfl/filters/mbfilter_byte4.c deleted file mode 100644 index b566e54772..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include "mbfilter.h" -#include "mbfilter_byte4.h" - -const mbfl_encoding mbfl_encoding_byte4be = { - mbfl_no_encoding_byte4be, - "byte4be", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte4be_wchar, - &vtbl_wchar_byte4be -}; - -const mbfl_encoding mbfl_encoding_byte4le = { - mbfl_no_encoding_byte4le, - "byte4le", - NULL, - NULL, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_byte4le_wchar, - &vtbl_wchar_byte4le -}; - -const struct mbfl_convert_vtbl vtbl_byte4be_wchar = { - mbfl_no_encoding_byte4be, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte4be_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte4be = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte4be, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte4be, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_byte4le_wchar = { - mbfl_no_encoding_byte4le, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_byte4le_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_byte4le = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_byte4le, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_byte4le, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff) << 24; - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 16; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 8; - filter->cache |= n; - } else { - filter->status = 0; - n = (c & 0xff) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)(c & 0xff, filter->data)); - return c; -} - -int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter) -{ - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff); - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 8; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 16; - filter->cache |= n; - } else { - filter->status = 0; - n = ((c & 0xff) << 24) | filter->cache; - CK((*filter->output_function)(n, filter->data)); - } - return c; -} - -int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter) -{ - CK((*filter->output_function)(c & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); - CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h b/ext/mbstring/libmbfl/filters/mbfilter_byte4.h deleted file mode 100644 index 572a2cf477..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#ifndef MBFL_MBFILTER_BYTE4_H -#define MBFL_MBFILTER_BYTE4_H - -extern const mbfl_encoding mbfl_encoding_byte4be; -extern const mbfl_encoding mbfl_encoding_byte4le; -extern const struct mbfl_convert_vtbl vtbl_byte4be_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte4be; -extern const struct mbfl_convert_vtbl vtbl_byte4le_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_byte4le; - -int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_BYTE4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c deleted file mode 100644 index 470adf1a08..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp1251.h" -#include "unicode_table_cp1251.h" - -static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL}; - -const mbfl_encoding mbfl_encoding_cp1251 = { - mbfl_no_encoding_cp1251, - "Windows-1251", - "Windows-1251", - (const char *(*)[])&mbfl_encoding_cp1251_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp1251_wchar, - &vtbl_wchar_cp1251 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp1251 = { - mbfl_no_encoding_cp1251, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp1251 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp1251 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp1251, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp1251, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_cp1251_wchar = { - mbfl_no_encoding_cp1251, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp1251_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * cp1251 => wchar - */ -int -mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp1251_ucs_table_min) { - s = c; - } else if (c >= cp1251_ucs_table_min && c < 0x100) { - s = cp1251_ucs_table[c - cp1251_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP1251; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => cp1251 - */ -int -mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp1251_ucs_table_len-1; - while (n >= 0) { - if (c == cp1251_ucs_table[n]) { - s = cp1251_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1251) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -/* all of this is so ugly now! */ -static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c <= 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h deleted file mode 100644 index b76cc9f680..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * - */ -/* - * the source code included in this files was separated from mbfilter_ru.h - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP1251_H -#define MBFL_MBFILTER_CP1251_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_cp1251; -extern const struct mbfl_identify_vtbl vtbl_identify_cp1251; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp1251; -extern const struct mbfl_convert_vtbl vtbl_cp1251_wchar; - -int mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP1251_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c deleted file mode 100644 index a274e4b796..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Wez Furlong <wez@thebrainroom.com> - * - */ -/* - * the source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp1252.h" -#include "unicode_table_cp1252.h" - -static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp1252_aliases[] = {"cp1252", NULL}; - -const mbfl_encoding mbfl_encoding_cp1252 = { - mbfl_no_encoding_cp1252, - "Windows-1252", - "Windows-1252", - (const char *(*)[])&mbfl_encoding_cp1252_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp1252_wchar, - &vtbl_wchar_cp1252 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp1252 = { - mbfl_no_encoding_cp1252, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp1252 -}; - -const struct mbfl_convert_vtbl vtbl_cp1252_wchar = { - mbfl_no_encoding_cp1252, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp1252_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp1252 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp1252, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp1252, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * wchar => cp1252 - */ -int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter) -{ - int s=-1, n; - - if (c >= 0x100) { - /* look it up from the cp1252 table */ - s = -1; - n = 31; - while (n >= 0) { - if (c == cp1252_ucs_table[n] && c != 0xfffe) { - s = 0x80 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_1) - { - s = c & MBFL_WCSPLANE_MASK; - } - } - else if (c >= 0 && c < 0x100) { - s = c; - } - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - return c; -} - -/* - * cp1252 => wchar - */ -int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0x80 && c < 0xa0) { - s = cp1252_ucs_table[c - 0x80]; - } else { - s = c; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* We only distinguish the MS extensions to ISO-8859-1. - * Actually, this is pretty much a NO-OP, since the identification - * system doesn't allow us to discriminate between a positive match, - * a possible match and a definite non-match. - * The problem here is that cp1252 looks like SJIS for certain chars. - * */ -static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xa0) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h deleted file mode 100644 index afb2fffa9b..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Wez Furlong <wez@thebrainroom.com> - * - */ -/* - * the source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP1252_H -#define MBFL_MBFILTER_CP1252_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_cp1252; -extern const struct mbfl_identify_vtbl vtbl_identify_cp1252; -extern const struct mbfl_convert_vtbl vtbl_cp1252_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp1252; - -int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP1252_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c deleted file mode 100644 index 7e4bb4b148..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Haluk AKIN <halukakin@gmail.com> - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp1254.h" -#include "unicode_table_cp1254.h" - -static int mbfl_filt_ident_cp1254(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp1254_aliases[] = {"CP1254", "CP-1254", "WINDOWS-1254", NULL}; - -const mbfl_encoding mbfl_encoding_cp1254 = { - mbfl_no_encoding_cp1254, - "Windows-1254", - "Windows-1254", - (const char *(*)[])&mbfl_encoding_cp1254_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp1254_wchar, - &vtbl_wchar_cp1254 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp1254 = { - mbfl_no_encoding_cp1254, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp1254 -}; - -const struct mbfl_convert_vtbl vtbl_cp1254_wchar = { - mbfl_no_encoding_cp1254, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp1254_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp1254 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp1254, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp1254, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * wchar => cp1254 - */ -int -mbfl_filt_conv_wchar_cp1254(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp1254_ucs_table_len-1; - while (n >= 0) { - if (c == cp1254_ucs_table[n] && c != 0xfffe) { - s = cp1254_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1254) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -/* - * cp1254 => wchar - */ -int -mbfl_filt_conv_cp1254_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp1254_ucs_table_min) { - s = c; - } else if (c >= cp1254_ucs_table_min && c < 0x100) { - s = cp1254_ucs_table[c - cp1254_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP1254; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* We only distinguish the MS extensions to ISO-8859-1. - * Actually, this is pretty much a NO-OP, since the identification - * system doesn't allow us to discriminate between a positive match, - * a possible match and a definite non-match. - * The problem here is that cp1254 looks like SJIS for certain chars. - * */ -static int mbfl_filt_ident_cp1254(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h deleted file mode 100644 index 15a63eae30..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Haluk AKIN <halukakin@gmail.com> - * - */ -/* - * the source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP1254_H -#define MBFL_MBFILTER_CP1254_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_cp1254; -extern const struct mbfl_identify_vtbl vtbl_identify_cp1254; -extern const struct mbfl_convert_vtbl vtbl_cp1254_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp1254; - -int mbfl_filt_conv_wchar_cp1254(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_cp1254_wchar(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP1254_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c index 3879f9eb5b..a4d1724e8f 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c @@ -36,10 +36,6 @@ typedef struct _mbfl_filt_conv_wchar_cp50220_ctx { mbfl_convert_filter last; } mbfl_filt_conv_wchar_cp50220_ctx; -static int mbfl_filt_ident_jis_ms(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_cp50220(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_cp50221(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_cp50222(int c, mbfl_identify_filter *filter); static void mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt); static void mbfl_filt_conv_wchar_cp50220_dtor(mbfl_convert_filter *filt); static void mbfl_filt_conv_wchar_cp50220_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest); @@ -59,7 +55,7 @@ const mbfl_encoding mbfl_encoding_cp50220 = { mbfl_no_encoding_cp50220, "CP50220", "ISO-2022-JP", - (const char *(*)[])NULL, + NULL, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp50220_wchar, @@ -70,7 +66,7 @@ const mbfl_encoding mbfl_encoding_cp50220raw = { mbfl_no_encoding_cp50220raw, "CP50220raw", "ISO-2022-JP", - (const char *(*)[])NULL, + NULL, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp50220raw_wchar, @@ -99,36 +95,6 @@ const mbfl_encoding mbfl_encoding_cp50222 = { &vtbl_wchar_cp50222 }; -const struct mbfl_identify_vtbl vtbl_identify_jis_ms = { - mbfl_no_encoding_jis_ms, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_jis_ms -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50220 = { - mbfl_no_encoding_cp50220, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50220 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50220raw = { - mbfl_no_encoding_cp50220raw, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50220 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50221 = { - mbfl_no_encoding_cp50221, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50221 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp50222 = { - mbfl_no_encoding_cp50222, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp50222 -}; - const struct mbfl_convert_vtbl vtbl_jis_ms_wchar = { mbfl_no_encoding_jis_ms, mbfl_no_encoding_wchar, @@ -585,7 +551,7 @@ mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt) ctx->last.opaque = ctx; ctx->last.data = filt->data; filt->filter_function = vtbl_tl_jisx0201_jisx0208.filter_function; - filt->filter_flush = vtbl_tl_jisx0201_jisx0208.filter_flush; + filt->filter_flush = (filter_flush_t)vtbl_tl_jisx0201_jisx0208.filter_flush; filt->output_function = (output_function_t)ctx->last.filter_function; filt->flush_function = (flush_function_t)ctx->last.filter_flush; filt->data = &ctx->last; @@ -948,332 +914,3 @@ mbfl_filt_conv_wchar_cp50222_flush(mbfl_convert_filter *filter) return 0; } - - -static int mbfl_filt_ident_jis_ms(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x20: X 0201 kana */ -/* case 0x80: X 0208 */ -/* case 0x90: X 0212 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (c == 0x0e) { /* "kana in" */ - filter->status = 0x20; - } else if (c == 0x0f) { /* "kana out" */ - filter->status = 0; - } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ -/* case 0x91: X 0212 second char */ - case 1: - filter->status &= ~0xf; - if (c == 0x1b) { - goto retry; - } else if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x44) { /* 'D' */ - filter->status = 0x90; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_cp50220(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_cp50221(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_cp50222(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h index e7cde7dff8..e97cd0fab8 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h @@ -37,11 +37,7 @@ extern const mbfl_encoding mbfl_encoding_cp50220; extern const mbfl_encoding mbfl_encoding_cp50220raw; extern const mbfl_encoding mbfl_encoding_cp50221; extern const mbfl_encoding mbfl_encoding_cp50222; -extern const struct mbfl_identify_vtbl vtbl_identify_jis_ms; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50220; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50220raw; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50221; -extern const struct mbfl_identify_vtbl vtbl_identify_cp50222; + extern const struct mbfl_convert_vtbl vtbl_jis_ms_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_jis_ms; extern const struct mbfl_convert_vtbl vtbl_cp50220_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c index da046c86b7..cb95469408 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c @@ -34,8 +34,6 @@ #include "unicode_table_jis.h" #include "cp932_table.h" -static int mbfl_filt_ident_cp51932(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -55,20 +53,13 @@ static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 }; - static const char *mbfl_encoding_cp51932_aliases[] = {"cp51932", NULL}; -const struct mbfl_identify_vtbl vtbl_identify_cp51932 = { - mbfl_no_encoding_cp51932, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp51932 -}; - const mbfl_encoding mbfl_encoding_cp51932 = { mbfl_no_encoding_cp51932, "CP51932", "CP51932", - (const char *(*)[])&mbfl_encoding_cp51932_aliases, + mbfl_encoding_cp51932_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_cp51932_wchar, @@ -299,40 +290,3 @@ mbfl_filt_conv_wchar_cp51932(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_cp51932(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ - filter->status = 1; - } else if (c == 0x8e) { /* kana first char */ - filter->status = 2; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got first half */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got 0x8e */ - if (c < 0xa1 || c > 0xdf) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h index bbf56f48ca..f48ec7cb3d 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_cp51932; -extern const struct mbfl_identify_vtbl vtbl_identify_cp51932; extern const struct mbfl_convert_vtbl vtbl_cp51932_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp51932; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c b/ext/mbstring/libmbfl/filters/mbfilter_cp850.c deleted file mode 100644 index 5d6b265fc1..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * Adaption for CP850: D. Giffeler <dg@artegic.de> - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp850.h" -#include "unicode_table_cp850.h" - -static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp850_aliases[] = {"CP850", "CP-850", "IBM850", "IBM-850", NULL}; - -const mbfl_encoding mbfl_encoding_cp850 = { - mbfl_no_encoding_cp850, - "CP850", - "CP850", - (const char *(*)[])&mbfl_encoding_cp850_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp850_wchar, - &vtbl_wchar_cp850 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp850 = { - mbfl_no_encoding_cp850, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp850 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp850 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp850, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp850, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_cp850_wchar = { - mbfl_no_encoding_cp850, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp850_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * cp850 => wchar - */ -int -mbfl_filt_conv_cp850_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp850_ucs_table_min) { - s = c; - } else if (c >= cp850_ucs_table_min && c < 0x100) { - s = cp850_ucs_table[c - cp850_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP850; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => cp850 - */ -int -mbfl_filt_conv_wchar_cp850(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp850_ucs_table_len-1; - while (n >= 0) { - if (c == cp850_ucs_table[n]) { - s = cp850_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP850) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.h b/ext/mbstring/libmbfl/filters/mbfilter_cp850.h deleted file mode 100644 index 2a0e8e9e65..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp850.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * Adaption for CP850: D. Giffeler <dg@artegic.de> - * - */ - -#ifndef MBFL_MBFILTER_CP850_H -#define MBFL_MBFILTER_CP850_H - -extern const mbfl_encoding mbfl_encoding_cp850; -extern const struct mbfl_identify_vtbl vtbl_identify_cp850; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp850; -extern const struct mbfl_convert_vtbl vtbl_cp850_wchar; - -int mbfl_filt_conv_cp850_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_cp850(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP850_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c deleted file mode 100644 index 504903bef0..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_cp866.h" -#include "unicode_table_cp866.h" - -static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM866", "IBM-866", NULL}; - -const mbfl_encoding mbfl_encoding_cp866 = { - mbfl_no_encoding_cp866, - "CP866", - "CP866", - (const char *(*)[])&mbfl_encoding_cp866_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_cp866_wchar, - &vtbl_wchar_cp866 -}; - -const struct mbfl_identify_vtbl vtbl_identify_cp866 = { - mbfl_no_encoding_cp866, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp866 -}; - -const struct mbfl_convert_vtbl vtbl_wchar_cp866 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_cp866, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_cp866, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_cp866_wchar = { - mbfl_no_encoding_cp866, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_cp866_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * cp866 => wchar - */ -int -mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < cp866_ucs_table_min) { - s = c; - } else if (c >= cp866_ucs_table_min && c < 0x100) { - s = cp866_ucs_table[c - cp866_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_CP866; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => cp866 - */ -int -mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = cp866_ucs_table_len-1; - while (n >= 0) { - if (c == cp866_ucs_table[n]) { - s = cp866_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP866) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h b/ext/mbstring/libmbfl/filters/mbfilter_cp866.h deleted file mode 100644 index e9eb25a541..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.h - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_CP866_H -#define MBFL_MBFILTER_CP866_H - -extern const mbfl_encoding mbfl_encoding_cp866; -extern const struct mbfl_identify_vtbl vtbl_identify_cp866; -extern const struct mbfl_convert_vtbl vtbl_wchar_cp866; -extern const struct mbfl_convert_vtbl vtbl_cp866_wchar; - -int mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_CP866_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c index 3cbca1cb64..351a94c81c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c @@ -33,8 +33,6 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -static int mbfl_filt_ident_cp932(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,19 +58,13 @@ const mbfl_encoding mbfl_encoding_cp932 = { mbfl_no_encoding_cp932, "CP932", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_cp932_aliases, + mbfl_encoding_cp932_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp932_wchar, &vtbl_wchar_cp932 }; -const struct mbfl_identify_vtbl vtbl_identify_cp932 = { - mbfl_no_encoding_cp932, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp932 -}; - const struct mbfl_convert_vtbl vtbl_cp932_wchar = { mbfl_no_encoding_cp932, mbfl_no_encoding_wchar, @@ -323,23 +315,3 @@ mbfl_filt_conv_wchar_cp932(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_cp932(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ - ; - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h index f0b6daeac7..031276ddf1 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_cp932; -extern const struct mbfl_identify_vtbl vtbl_identify_cp932; extern const struct mbfl_convert_vtbl vtbl_cp932_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp932; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c index df6d77907f..4cfd1af877 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c @@ -32,8 +32,6 @@ #define UNICODE_TABLE_CP936_DEF #include "unicode_table_cp936.h" -static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_cp936[] = { /* 0x81-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,19 +57,13 @@ const mbfl_encoding mbfl_encoding_cp936 = { mbfl_no_encoding_cp936, "CP936", "CP936", - (const char *(*)[])&mbfl_encoding_cp936_aliases, + mbfl_encoding_cp936_aliases, mblen_table_cp936, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_cp936_wchar, &vtbl_wchar_cp936 }; -const struct mbfl_identify_vtbl vtbl_identify_cp936 = { - mbfl_no_encoding_cp936, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_cp936 -}; - const struct mbfl_convert_vtbl vtbl_cp936_wchar = { mbfl_no_encoding_cp936, mbfl_no_encoding_wchar, @@ -283,21 +275,3 @@ mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfe || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0x80 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h index cc5e9bd333..d10391f5d2 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_cp936; -extern const struct mbfl_identify_vtbl vtbl_identify_cp936; extern const struct mbfl_convert_vtbl vtbl_cp936_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_cp936; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c index 53a8aac2a6..6ee0bf9bd0 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c @@ -32,8 +32,6 @@ #include "unicode_table_cp936.h" -static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_euccn[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,19 +57,13 @@ const mbfl_encoding mbfl_encoding_euc_cn = { mbfl_no_encoding_euc_cn, "EUC-CN", "CN-GB", - (const char *(*)[])&mbfl_encoding_euc_cn_aliases, + mbfl_encoding_euc_cn_aliases, mblen_table_euccn, MBFL_ENCTYPE_MBCS, &vtbl_euccn_wchar, &vtbl_wchar_euccn }; -const struct mbfl_identify_vtbl vtbl_identify_euccn = { - mbfl_no_encoding_euc_cn, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_euccn -}; - const struct mbfl_convert_vtbl vtbl_euccn_wchar = { mbfl_no_encoding_euc_cn, mbfl_no_encoding_wchar, @@ -209,31 +201,3 @@ mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h index 31251fcf6d..7ef92d8b4b 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_cn; -extern const struct mbfl_identify_vtbl vtbl_identify_euccn; extern const struct mbfl_convert_vtbl vtbl_euccn_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_euccn; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c index 252a10a58d..1589ae7966 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c @@ -33,7 +33,7 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter); +static int mbfl_filt_conv_eucjp_wchar_flush(mbfl_convert_filter *filter); const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,26 +60,20 @@ const mbfl_encoding mbfl_encoding_euc_jp = { mbfl_no_encoding_euc_jp, "EUC-JP", "EUC-JP", - (const char *(*)[])&mbfl_encoding_euc_jp_aliases, + mbfl_encoding_euc_jp_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_eucjp_wchar, &vtbl_wchar_eucjp }; -const struct mbfl_identify_vtbl vtbl_identify_eucjp = { - mbfl_no_encoding_euc_jp, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_eucjp -}; - const struct mbfl_convert_vtbl vtbl_eucjp_wchar = { mbfl_no_encoding_euc_jp, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_eucjp_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_eucjp_wchar_flush, NULL, }; @@ -101,7 +95,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_eucjp = { int mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) { - int c1, s, w; + int c1, s, w = 0; switch (filter->status) { case 0: @@ -115,9 +109,7 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) } else if (c == 0x8f) { /* X 0212 first char */ filter->status = 3; } else { - w = c & MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(w, filter->data)); + CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data)); } break; @@ -128,21 +120,13 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) s = (c1 - 0xa1)*94 + c - 0xa1; if (s >= 0 && s < jisx0208_ucs_table_size) { w = jisx0208_ucs_table[s]; - } else { - w = 0; } if (w <= 0) { - w = ((c1 & 0x7f) << 8) | (c & 0x7f); - w &= MBFL_WCSPLANE_MASK; - w |= MBFL_WCSPLANE_JIS0208; + w = ((c1 & 0x7f) << 8) | (c & 0x7f) | MBFL_WCSPLANE_JIS0208; } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = (c1 << 8) | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } break; @@ -152,47 +136,31 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) if (c > 0xa0 && c < 0xe0) { w = 0xfec0 + c; CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = 0x8e00 | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = 0x8e00 | c | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } break; - case 3: /* got 0x8f, X 0212 first char */ - if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); - filter->status = 0; - } else { - filter->status++; - filter->cache = c; - } + case 3: /* got 0x8f, JIS X 0212 first byte */ + filter->status++; + filter->cache = c; break; - case 4: /* got 0x8f, X 0212 second char */ + + case 4: /* got 0x8f, JIS X 0212 second byte */ filter->status = 0; c1 = filter->cache; - if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) { + if (c > 0xA0 && c < 0xFF && c1 > 0xA0 && c1 < 0xFF) { s = (c1 - 0xa1)*94 + c - 0xa1; if (s >= 0 && s < jisx0212_ucs_table_size) { w = jisx0212_ucs_table[s]; - } else { - w = 0; } if (w <= 0) { - w = ((c1 & 0x7f) << 8) | (c & 0x7f); - w &= MBFL_WCSPLANE_MASK; - w |= MBFL_WCSPLANE_JIS0212; + w = ((c1 & 0x7f) << 8) | (c & 0x7f) | MBFL_WCSPLANE_JIS0212; } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = (c1 << 8) | c | 0x8f0000; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | 0x8f0000 | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } break; @@ -205,13 +173,26 @@ mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) return c; } +static int mbfl_filt_conv_eucjp_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + (*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} + /* * wchar => EUC-JP */ int mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) { - int c1, s; + int s; s = 0; if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { @@ -224,13 +205,7 @@ mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) s = ucs_r_jis_table[c - ucs_r_jis_table_min]; } if (s <= 0) { - c1 = c & ~MBFL_WCSPLANE_MASK; - if (c1 == MBFL_WCSPLANE_JIS0208) { - s = c & MBFL_WCSPLANE_MASK; - } else if (c1 == MBFL_WCSPLANE_JIS0212) { - s = c & MBFL_WCSPLANE_MASK; - s |= 0x8080; - } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ s = 0x2140; } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ s = 0x2141; @@ -244,10 +219,9 @@ mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) s = 0x2172; } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ s = 0x224c; - } - if (c == 0) { + } else if (c == 0) { s = 0; - } else if (s <= 0) { + } else { s = -1; } } @@ -271,55 +245,3 @@ mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) return c; } - -int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ - filter->status = 1; - } else if (c == 0x8e) { /* kana first char */ - filter->status = 2; - } else if (c == 0x8f) { /* X 0212 first char */ - filter->status = 3; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got first half */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got 0x8e */ - if (c < 0xa1 || c > 0xdf) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 3: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status++; - break; - case 4: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h index e1bd565343..cc7aa3a6bf 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_jp; -extern const struct mbfl_identify_vtbl vtbl_identify_eucjp; extern const struct mbfl_convert_vtbl vtbl_eucjp_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c index 30d869cea5..a14d37ec93 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c @@ -31,7 +31,6 @@ #include "mbfilter_euc_jp_2004.h" #include "mbfilter_sjis_2004.h" -extern int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter); extern const unsigned char mblen_table_eucjp[]; static const char *mbfl_encoding_eucjp2004_aliases[] = {"EUC_JP-2004", NULL}; @@ -40,19 +39,13 @@ const mbfl_encoding mbfl_encoding_eucjp2004 = { mbfl_no_encoding_eucjp2004, "EUC-JP-2004", "EUC-JP", - (const char *(*)[])&mbfl_encoding_eucjp2004_aliases, + mbfl_encoding_eucjp2004_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_eucjp2004_wchar, &vtbl_wchar_eucjp2004 }; -const struct mbfl_identify_vtbl vtbl_identify_eucjp2004 = { - mbfl_no_encoding_eucjp2004, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_eucjp -}; - const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar = { mbfl_no_encoding_eucjp2004, mbfl_no_encoding_wchar, @@ -69,6 +62,6 @@ const struct mbfl_convert_vtbl vtbl_wchar_eucjp2004 = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_jis2004_flush, + mbfl_filt_conv_wchar_jis2004_flush, NULL, }; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h index 55c06aef98..affdd447f5 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_eucjp2004; -extern const struct mbfl_identify_vtbl vtbl_identify_eucjp2004; extern const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp2004; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c index 5798bff0fc..b93fc9101a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c @@ -34,8 +34,6 @@ #include "unicode_table_jis.h" #include "cp932_table.h" -static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -55,21 +53,13 @@ static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 }; - -static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", - "eucJP-ms", NULL}; - -const struct mbfl_identify_vtbl vtbl_identify_eucjpwin = { - mbfl_no_encoding_eucjp_win, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_eucjp_win -}; +static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", "eucJP-ms", NULL}; const mbfl_encoding mbfl_encoding_eucjp_win = { mbfl_no_encoding_eucjp_win, "eucJP-win", "EUC-JP", - (const char *(*)[])&mbfl_encoding_eucjp_win_aliases, + mbfl_encoding_eucjp_win_aliases, mblen_table_eucjp, MBFL_ENCTYPE_MBCS, &vtbl_eucjpwin_wchar, @@ -319,8 +309,6 @@ mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter) s1 = 0x2172; } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ s1 = 0x224c; - } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ - s1 = 0x2141; } else { s1 = -1; c1 = 0; @@ -375,55 +363,3 @@ mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ - filter->status = 1; - } else if (c == 0x8e) { /* kana first char */ - filter->status = 2; - } else if (c == 0x8f) { /* X 0212 first char */ - filter->status = 3; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got first half */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got 0x8e */ - if (c < 0xa1 || c > 0xdf) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 3: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status++; - break; - case 4: /* got 0x8f */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h index f17058d523..bb1e4dc392 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_eucjp_win; -extern const struct mbfl_identify_vtbl vtbl_identify_eucjpwin; extern const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_eucjpwin; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c index e9b08e08c1..3f423f5969 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c @@ -31,8 +31,6 @@ #include "mbfilter_euc_kr.h" #include "unicode_table_uhc.h" -static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_euckr[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -58,19 +56,13 @@ const mbfl_encoding mbfl_encoding_euc_kr = { mbfl_no_encoding_euc_kr, "EUC-KR", "EUC-KR", - (const char *(*)[])&mbfl_encoding_euc_kr_aliases, + mbfl_encoding_euc_kr_aliases, mblen_table_euckr, MBFL_ENCTYPE_MBCS, &vtbl_euckr_wchar, &vtbl_wchar_euckr }; -const struct mbfl_identify_vtbl vtbl_identify_euckr = { - mbfl_no_encoding_euc_kr, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_euckr -}; - const struct mbfl_convert_vtbl vtbl_euckr_wchar = { mbfl_no_encoding_euc_kr, mbfl_no_encoding_wchar, @@ -223,31 +215,3 @@ mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h index 1534d2bedc..e0c13cf53a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_kr; -extern const struct mbfl_identify_vtbl vtbl_identify_euckr; extern const struct mbfl_convert_vtbl vtbl_euckr_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_euckr; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c index c76eeb36bf..68dd539b72 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c @@ -32,8 +32,6 @@ #include "unicode_table_cns11643.h" -static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_euctw[] = { /* 0xA1-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,19 +58,13 @@ const mbfl_encoding mbfl_encoding_euc_tw = { mbfl_no_encoding_euc_tw, "EUC-TW", "EUC-TW", - (const char *(*)[])&mbfl_encoding_euc_tw_aliases, + mbfl_encoding_euc_tw_aliases, mblen_table_euctw, MBFL_ENCTYPE_MBCS, &vtbl_euctw_wchar, &vtbl_wchar_euctw }; -const struct mbfl_identify_vtbl vtbl_identify_euctw = { - mbfl_no_encoding_euc_tw, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_euctw -}; - const struct mbfl_convert_vtbl vtbl_euctw_wchar = { mbfl_no_encoding_euc_tw, mbfl_no_encoding_wchar, @@ -271,55 +263,3 @@ mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter) } return c; } - -static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ - filter->status = 1; - } else if (c == 0x8e) { /* DBCS lead byte */ - filter->status = 2; - } else { /* bad */ - filter->flag = 1; - } - break; - - case 1: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 2: /* got lead byte */ - if (c >= 0xa1 && c < 0xaf) { /* ok */ - filter->status = 3; - } else { - filter->flag = 1; /* bad */ - } - break; - - case 3: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 4; - break; - - case 4: /* got lead byte */ - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h index ed1f091259..9c2ffa4802 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_euc_tw; -extern const struct mbfl_identify_vtbl vtbl_identify_euctw; extern const struct mbfl_convert_vtbl vtbl_euctw_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_euctw; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c index b94d664f40..dfab3d59df 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c @@ -33,27 +33,19 @@ #include "unicode_table_cp936.h" #include "unicode_table_gb18030.h" -static int mbfl_filt_ident_gb18030(int c, mbfl_identify_filter *filter); - static const char *mbfl_encoding_gb18030_aliases[] = {"gb-18030", "gb-18030-2000", NULL}; const mbfl_encoding mbfl_encoding_gb18030 = { mbfl_no_encoding_gb18030, "GB18030", "GB18030", - (const char *(*)[])&mbfl_encoding_gb18030_aliases, + mbfl_encoding_gb18030_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_gb18030_wchar, &vtbl_wchar_gb18030 }; -const struct mbfl_identify_vtbl vtbl_identify_gb18030 = { - mbfl_no_encoding_gb18030, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_gb18030 -}; - const struct mbfl_convert_vtbl vtbl_gb18030_wchar = { mbfl_no_encoding_gb18030, mbfl_no_encoding_wchar, @@ -76,42 +68,37 @@ const struct mbfl_convert_vtbl vtbl_wchar_gb18030 = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -int -mbfl_bisec_srch(int w, const unsigned short *tbl, int n) +/* `tbl` contains inclusive ranges, each represented by a pair of unsigned shorts */ +int mbfl_bisec_srch(int w, const unsigned short *tbl, int n) { - int k, k1 = 0, k2 = n-1; - - while (k1 < k2) { - k = (k1+k2) >> 1; - if (w <= tbl[2*k+1]) { - k2 = k; - } else if (w >= tbl[2*k+2]) { - k1 = k + 1; + int l = 0, r = n-1; + while (l <= r) { + int probe = (l + r) >> 1; + unsigned short lo = tbl[2 * probe], hi = tbl[(2 * probe) + 1]; + if (w < lo) { + r = probe - 1; + } else if (w > hi) { + l = probe + 1; } else { - return -1; + return probe; } } - return k1; + return -1; } -int -mbfl_bisec_srch2(int w, const unsigned short tbl[], int n) +/* `tbl` contains single values, not ranges */ +int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n) { - int k, k1 = 0, k2 = n; - - if (w == tbl[0]) { - return 0; - } - - while (k2 - k1 > 1) { - k = (k1 + k2) >> 1; - if (w < tbl[k]) { - k2 = k; - } else if (w > tbl[k]) { - k1 = k; + int l = 0, r = n-1; + while (l <= r) { + int probe = (l + r) >> 1; + unsigned short val = tbl[probe]; + if (w < val) { + r = probe - 1; + } else if (w > val) { + l = probe + 1; } else { - return k; + return probe; } } return -1; @@ -414,55 +401,3 @@ mbfl_filt_conv_wchar_gb18030(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_gb18030(int c, mbfl_identify_filter *filter) -{ - int c1; - - c1 = (filter->status >> 8) & 0xff; - filter->status &= 0xff; - - if (filter->status == 0) { - if (c <= 0x80 || c == 0xff) { - filter->status = 0; - } else { - filter->status = 1; - filter->status |= (c << 8); - } - } else if (filter->status == 1) { /* dbcs/qbcs 2nd byte */ - if (((c1 >= 0x81 && c1 <= 0x84) || (c1 >= 0x90 && c1 <= 0xe3)) && c >= 0x30 && c <= 0x39) { /* qbcs */ - filter->status = 2; - } else if (((c1 >= 0xaa && c1 <= 0xaf) || (c1 >= 0xf8 && c1 <= 0xfe)) && (c >= 0xa1 && c <= 0xfe)) { - filter->status = 0; /* UDA part 1,2 */ - } else if (c1 >= 0xa1 && c1 <= 0xa7 && c >= 0x40 && c < 0xa1 && c != 0x7f) { - filter->status = 0; /* UDA part 3 */ - } else if ((c1 >= 0xa1 && c1 <= 0xa9 && c >= 0xa1 && c <= 0xfe) || - (c1 >= 0xb0 && c1 <= 0xf7 && c >= 0xa1 && c <= 0xfe) || - (c1 >= 0x81 && c1 <= 0xa0 && c >= 0x40 && c <= 0xfe && c != 0x7f) || - (c1 >= 0xaa && c1 <= 0xfe && c >= 0x40 && c <= 0xa0 && c != 0x7f) || - (c1 >= 0xa8 && c1 <= 0xa9 && c >= 0x40 && c <= 0xa0 && c != 0x7f)) { - filter->status = 0; /* DBCS */ - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - } else if (filter->status == 2) { /* qbcs 3rd byte */ - if (c > 0x80 && c < 0xff) { - filter->status = 3; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - } else if (filter->status == 3) { /* qbcs 4th byte */ - if (c >= 0x30 && c < 0x40) { - filter->status = 0; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h index dc7d51b6e2..e7f0eae16b 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_gb18030; -extern const struct mbfl_identify_vtbl vtbl_identify_gb18030; extern const struct mbfl_convert_vtbl vtbl_gb18030_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_gb18030; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c index 7176fd4717..95a0817103 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c @@ -57,7 +57,7 @@ const mbfl_encoding mbfl_encoding_html_ent = { mbfl_no_encoding_html_ent, "HTML-ENTITIES", "HTML-ENTITIES", - (const char *(*)[])&mbfl_encoding_html_ent_aliases, + mbfl_encoding_html_ent_aliases, NULL, MBFL_ENCTYPE_GL_UNSAFE, &vtbl_html_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.c b/ext/mbstring/libmbfl/filters/mbfilter_hz.c index ceac85816c..bf3f8c4b77 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_hz.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_hz.c @@ -32,8 +32,6 @@ #include "unicode_table_cp936.h" -static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter); - const mbfl_encoding mbfl_encoding_hz = { mbfl_no_encoding_hz, "HZ", @@ -45,12 +43,6 @@ const mbfl_encoding mbfl_encoding_hz = { &vtbl_wchar_hz }; -const struct mbfl_identify_vtbl vtbl_identify_hz = { - mbfl_no_encoding_hz, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_hz -}; - const struct mbfl_convert_vtbl vtbl_hz_wchar = { mbfl_no_encoding_hz, mbfl_no_encoding_wchar, @@ -225,49 +217,3 @@ mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter) filter->status &= 0xff; return 0; } - -static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter) -{ - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: GB2312 */ - case 0: - if (c == 0x7e) { - filter->status += 2; - } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x11: GB2312 second char */ - case 1: - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - case 2: - if (c == 0x7d) { /* '}' */ - filter->status = 0; - } else if (c == 0x7b) { /* '{' */ - filter->status = 0x10; - } else if (c == 0x7e) { /* '~' */ - filter->status = 0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.h b/ext/mbstring/libmbfl/filters/mbfilter_hz.h index e7e35cacc8..6b1dfb1564 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_hz.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_hz.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_hz; -extern const struct mbfl_identify_vtbl vtbl_identify_hz; extern const struct mbfl_convert_vtbl vtbl_hz_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_hz; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c index 1e9757eae6..950365045c 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c @@ -34,27 +34,19 @@ #include "unicode_table_jis.h" #include "cp932_table.h" -int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter); - static const char *mbfl_encoding_2022jpms_aliases[] = {"ISO2022JPMS", NULL}; const mbfl_encoding mbfl_encoding_2022jpms = { mbfl_no_encoding_2022jpms, "ISO-2022-JP-MS", "ISO-2022-JP", - (const char *(*)[])&mbfl_encoding_2022jpms_aliases, + mbfl_encoding_2022jpms_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_2022jpms_wchar, &vtbl_wchar_2022jpms }; -const struct mbfl_identify_vtbl vtbl_identify_2022jpms = { - mbfl_no_encoding_2022jpms, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jpms -}; - const struct mbfl_convert_vtbl vtbl_2022jpms_wchar = { mbfl_no_encoding_2022jpms, mbfl_no_encoding_wchar, @@ -429,97 +421,3 @@ mbfl_filt_conv_any_2022jpms_flush(mbfl_convert_filter *filter) return 0; } - -int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x20: X 0201 kana */ -/* case 0x80: X 0208 */ -/* case 0xa0: X UDC */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if ((filter->status == 0x80 || filter->status == 0xa0) && c > 0x20 && c < 0x80) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ -/* case 0xa1: UDC second char */ - case 1: - filter->status &= ~0xf; - if (c == 0x1b) { - goto retry; - } else if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x3f) { /* '?' */ - filter->status = 0xa0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h index 7c40b19246..fdc85183d7 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022jpms; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jpms; extern const struct mbfl_convert_vtbl vtbl_2022jpms_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_2022jpms; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c index 8df1d6f9b5..feb29a0a2a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c @@ -31,8 +31,6 @@ #include "mbfilter_iso2022_kr.h" #include "unicode_table_uhc.h" -static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter); - const mbfl_encoding mbfl_encoding_2022kr = { mbfl_no_encoding_2022kr, "ISO-2022-KR", @@ -44,12 +42,6 @@ const mbfl_encoding mbfl_encoding_2022kr = { &vtbl_wchar_2022kr }; -const struct mbfl_identify_vtbl vtbl_identify_2022kr = { - mbfl_no_encoding_2022kr, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022kr -}; - const struct mbfl_convert_vtbl vtbl_wchar_2022kr = { mbfl_no_encoding_wchar, mbfl_no_encoding_2022kr, @@ -282,73 +274,3 @@ mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter) return 0; } - -static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: KSC5601 mode */ -/* case 0x20: KSC5601 DBCS */ -/* case 0x40: KSC5601 SBCS */ - case 0: - if (!(filter->status & 0x10)) { - if (c == 0x1b) - filter->status += 2; - } else if (filter->status == 0x20 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x21: KSC5601 second char */ - case 1: - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x29) { /* ')' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $) */ - case 5: - if (c == 0x43) { /* 'C' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h index 7277c5f11c..a00da5bbac 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022kr; -extern const struct mbfl_identify_vtbl vtbl_identify_2022kr; extern const struct mbfl_convert_vtbl vtbl_wchar_2022kr; extern const struct mbfl_convert_vtbl vtbl_2022kr_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c index b381f09bea..a8f2a1da53 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c @@ -34,7 +34,6 @@ #include "unicode_table_jis.h" extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); -static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter); const mbfl_encoding mbfl_encoding_2022jp_2004 = { mbfl_no_encoding_2022jp_2004, @@ -47,12 +46,6 @@ const mbfl_encoding mbfl_encoding_2022jp_2004 = { &vtbl_wchar_2022jp_2004 }; -const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004 = { - mbfl_no_encoding_2022jp_2004, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jp_2004 -}; - const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar = { mbfl_no_encoding_2022jp_2004, mbfl_no_encoding_wchar, @@ -69,96 +62,6 @@ const struct mbfl_convert_vtbl vtbl_wchar_2022jp_2004 = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_jis2004_flush, + mbfl_filt_conv_wchar_jis2004_flush, NULL, }; - -static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x80: X 0212 */ -/* case 0x90: X 0213 plane 1 */ -/* case 0xa0: X 0213 plane 2 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x42) { /* 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x51) { /* JIS X 0213 plane 1 */ - filter->status = 0x90; - } else if (c == 0x50) { /* JIS X 0213 plane 2 */ - filter->status = 0xa0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h index 929559b87f..58b2dd31d8 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022jp_2004; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004; extern const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp_2004; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c index 32ea47712e..e6300675e8 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c @@ -36,7 +36,6 @@ #include "cp932_table.h" extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); -extern int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter); static const char *mbfl_encoding_2022jp_kddi_aliases[] = {"ISO-2022-JP-KDDI", NULL}; @@ -44,19 +43,13 @@ const mbfl_encoding mbfl_encoding_2022jp_kddi = { mbfl_no_encoding_2022jp_kddi, "ISO-2022-JP-MOBILE#KDDI", "ISO-2022-JP", - (const char *(*)[])&mbfl_encoding_2022jp_kddi_aliases, + mbfl_encoding_2022jp_kddi_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_2022jp_kddi_wchar, &vtbl_wchar_2022jp_kddi }; -const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi = { - mbfl_no_encoding_2022jp_kddi, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jpms -}; - const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar = { mbfl_no_encoding_2022jp_kddi, mbfl_no_encoding_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h index a375e8df0e..a53ec2c36f 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_2022jp_kddi; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi; extern const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp_kddi; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c deleted file mode 100644 index 1549ba81bf..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_1.h" - -static const char *mbfl_encoding_8859_1_aliases[] = {"ISO8859-1", "latin1", NULL}; - -const mbfl_encoding mbfl_encoding_8859_1 = { - mbfl_no_encoding_8859_1, - "ISO-8859-1", - "ISO-8859-1", - (const char *(*)[])&mbfl_encoding_8859_1_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_1_wchar, - &vtbl_wchar_8859_1 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_1 = { - mbfl_no_encoding_8859_1, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_1_wchar = { - mbfl_no_encoding_8859_1, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_1_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_1 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_1, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_1, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-1 => wchar - */ -int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter) -{ - return (*filter->output_function)(c, filter->data); -} - -/* - * wchar => ISO-8859-1 - */ -int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter) -{ - if (c >= 0 && c < 0x100) { - CK((*filter->output_function)(c, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h deleted file mode 100644 index b593f10f54..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.h - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_1_H -#define MBFL_MBFILTER_ISO8859_1_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_1; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_1; -extern const struct mbfl_convert_vtbl vtbl_8859_1_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_1; - -int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_1_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c deleted file mode 100644 index 12cd960a88..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_10.h" -#include "unicode_table_iso8859_10.h" - -static const char *mbfl_encoding_8859_10_aliases[] = {"ISO8859-10", "latin6", NULL}; - -const mbfl_encoding mbfl_encoding_8859_10 = { - mbfl_no_encoding_8859_10, - "ISO-8859-10", - "ISO-8859-10", - (const char *(*)[])&mbfl_encoding_8859_10_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_10_wchar, - &vtbl_wchar_8859_10 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_10 = { - mbfl_no_encoding_8859_10, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_10_wchar = { - mbfl_no_encoding_8859_10, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_10_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_10 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_10, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_10, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-10 => wchar - */ -int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_10_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_10; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-10 - */ -int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_10_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_10) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h deleted file mode 100644 index f9133404de..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_10_H -#define MBFL_MBFILTER_ISO8859_10_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_10; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_10; -extern const struct mbfl_convert_vtbl vtbl_8859_10_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_10; - -int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_10_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c deleted file mode 100644 index 25526263b8..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_13.h" -#include "unicode_table_iso8859_13.h" - -static const char *mbfl_encoding_8859_13_aliases[] = {"ISO8859-13", NULL}; - -const mbfl_encoding mbfl_encoding_8859_13 = { - mbfl_no_encoding_8859_13, - "ISO-8859-13", - "ISO-8859-13", - (const char *(*)[])&mbfl_encoding_8859_13_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_13_wchar, - &vtbl_wchar_8859_13 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_13 = { - mbfl_no_encoding_8859_13, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_13_wchar = { - mbfl_no_encoding_8859_13, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_13_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_13 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_13, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_13, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-13 => wchar - */ -int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_13_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_13; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-13 - */ -int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_13_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_13) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h deleted file mode 100644 index dcd6075594..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_13_H -#define MBFL_MBFILTER_ISO8859_13_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_13; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_13; -extern const struct mbfl_convert_vtbl vtbl_8859_13_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_13; - -int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_13_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c deleted file mode 100644 index 06a2e4cd98..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_14.h" -#include "unicode_table_iso8859_14.h" - -static const char *mbfl_encoding_8859_14_aliases[] = {"ISO8859-14", "latin8", NULL}; - -const mbfl_encoding mbfl_encoding_8859_14 = { - mbfl_no_encoding_8859_14, - "ISO-8859-14", - "ISO-8859-14", - (const char *(*)[])&mbfl_encoding_8859_14_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_14_wchar, - &vtbl_wchar_8859_14 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_14 = { - mbfl_no_encoding_8859_14, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_14_wchar = { - mbfl_no_encoding_8859_14, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_14_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_14 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_14, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_14, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-14 => wchar - */ -int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_14_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_14; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-14 - */ -int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_14_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_14) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h deleted file mode 100644 index 90531e668a..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * COPYRIGHT NOTICE - * - * This file is a portion of "streamable kanji code filter and converter" - * library, which is distributed under GNU Lesser General Public License - * version 2.1. - * - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_14_H -#define MBFL_MBFILTER_ISO8859_14_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_14; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_14; -extern const struct mbfl_convert_vtbl vtbl_8859_14_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_14; - -int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_14_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c deleted file mode 100644 index 82b40796b8..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_15.h" -#include "unicode_table_iso8859_15.h" - -static const char *mbfl_encoding_8859_15_aliases[] = {"ISO8859-15", NULL}; - -const mbfl_encoding mbfl_encoding_8859_15 = { - mbfl_no_encoding_8859_15, - "ISO-8859-15", - "ISO-8859-15", - (const char *(*)[])&mbfl_encoding_8859_15_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_15_wchar, - &vtbl_wchar_8859_15 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_15 = { - mbfl_no_encoding_8859_15, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_15_wchar = { - mbfl_no_encoding_8859_15, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_15_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_15 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_15, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_15, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-15 => wchar - */ -int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_15_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_15; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-15 - */ -int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_15_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_15) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h deleted file mode 100644 index a8fb339b0d..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * COPYRIGHT NOTICE - * - * This file is a portion of "streamable kanji code filter and converter" - * library, which is distributed under GNU Lesser General Public License - * version 2.1. - * - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_15_H -#define MBFL_MBFILTER_ISO8859_15_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_15; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_15; -extern const struct mbfl_convert_vtbl vtbl_8859_15_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_15; - -int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_15_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c deleted file mode 100644 index 80f1461364..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_16.h" -#include "unicode_table_iso8859_16.h" - -static const char *mbfl_encoding_8859_16_aliases[] = {"ISO8859-16", NULL}; - -const mbfl_encoding mbfl_encoding_8859_16 = { - mbfl_no_encoding_8859_16, - "ISO-8859-16", - "ISO-8859-16", - (const char *(*)[])&mbfl_encoding_8859_16_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_16_wchar, - &vtbl_wchar_8859_16 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_16 = { - mbfl_no_encoding_8859_16, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_16_wchar = { - mbfl_no_encoding_8859_16, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_16_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_16 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_16, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_16, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-16 => wchar - */ -int mbfl_filt_conv_8859_16_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_16_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_16; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-16 - */ -int mbfl_filt_conv_wchar_8859_16(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_16_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_16) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h deleted file mode 100644 index a1a53d7909..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * COPYRIGHT NOTICE - * - * This file is a portion of "streamable kanji code filter and converter" - * library, which is distributed under GNU Lesser General Public License - * version 2.1. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_16_H -#define MBFL_MBFILTER_ISO8859_16_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_16; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_16; -extern const struct mbfl_convert_vtbl vtbl_8859_16_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_16; - -int mbfl_filt_conv_8859_16_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_16(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_16_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c deleted file mode 100644 index 86044e15d3..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_2.h" -#include "unicode_table_iso8859_2.h" - -static const char *mbfl_encoding_8859_2_aliases[] = {"ISO8859-2", "latin2", NULL}; - -const mbfl_encoding mbfl_encoding_8859_2 = { - mbfl_no_encoding_8859_2, - "ISO-8859-2", - "ISO-8859-2", - (const char *(*)[])&mbfl_encoding_8859_2_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_2_wchar, - &vtbl_wchar_8859_2 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_2 = { - mbfl_no_encoding_8859_2, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_2_wchar = { - mbfl_no_encoding_8859_2, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_2_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_2 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_2, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_2, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-2 => wchar - */ -int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_2_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_2; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-2 - */ -int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_2_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_2) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h deleted file mode 100644 index f344168a18..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_2_H -#define MBFL_MBFILTER_ISO8859_2_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_2; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_2; -extern const struct mbfl_convert_vtbl vtbl_8859_2_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_2; - -int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c deleted file mode 100644 index 64eb9b5cf9..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_3.h" -#include "unicode_table_iso8859_3.h" - -static const char *mbfl_encoding_8859_3_aliases[] = {"ISO8859-3", "latin3", NULL}; - -const mbfl_encoding mbfl_encoding_8859_3 = { - mbfl_no_encoding_8859_3, - "ISO-8859-3", - "ISO-8859-3", - (const char *(*)[])&mbfl_encoding_8859_3_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_3_wchar, - &vtbl_wchar_8859_3 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_3 = { - mbfl_no_encoding_8859_3, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_3_wchar = { - mbfl_no_encoding_8859_3, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_3_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_3 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_3, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_3, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-3 => wchar - */ -int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_3_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_3; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-3 - */ -int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_3_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_3) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h deleted file mode 100644 index 746085373a..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_3_H -#define MBFL_MBFILTER_ISO8859_3_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_3; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_3; -extern const struct mbfl_convert_vtbl vtbl_8859_3_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_3; - -int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_3_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c deleted file mode 100644 index 12a9f7cb10..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_4.h" -#include "unicode_table_iso8859_4.h" - -static const char *mbfl_encoding_8859_4_aliases[] = {"ISO8859-4", "latin4", NULL}; - -const mbfl_encoding mbfl_encoding_8859_4 = { - mbfl_no_encoding_8859_4, - "ISO-8859-4", - "ISO-8859-4", - (const char *(*)[])&mbfl_encoding_8859_4_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_4_wchar, - &vtbl_wchar_8859_4 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_4 = { - mbfl_no_encoding_8859_4, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_4_wchar = { - mbfl_no_encoding_8859_4, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_4_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_4 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_4, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_4, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-4 => wchar - */ -int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_4_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_4; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-4 - */ -int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_4_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_4) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h deleted file mode 100644 index fe4dcdc696..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_4_H -#define MBFL_MBFILTER_ISO8859_4_H - -extern const mbfl_encoding mbfl_encoding_8859_4; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_4; -extern const struct mbfl_convert_vtbl vtbl_8859_4_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_4; - -int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c deleted file mode 100644 index 70496d07e7..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_5.h" -#include "unicode_table_iso8859_5.h" - -static const char *mbfl_encoding_8859_5_aliases[] = {"ISO8859-5", "cyrillic", NULL}; - -const mbfl_encoding mbfl_encoding_8859_5 = { - mbfl_no_encoding_8859_5, - "ISO-8859-5", - "ISO-8859-5", - (const char *(*)[])&mbfl_encoding_8859_5_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_5_wchar, - &vtbl_wchar_8859_5 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_5 = { - mbfl_no_encoding_8859_5, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_5_wchar = { - mbfl_no_encoding_8859_5, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_5_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_5 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_5, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_5, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-5 => wchar - */ -int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_5_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_5; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-5 - */ -int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_5_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_5) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h deleted file mode 100644 index 8b09844141..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_5_H -#define MBFL_MBFILTER_ISO8859_5_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_5; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_5; -extern const struct mbfl_convert_vtbl vtbl_8859_5_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_5; - -int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_5_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c deleted file mode 100644 index 59d981e9c2..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_6.h" -#include "unicode_table_iso8859_6.h" - -static const char *mbfl_encoding_8859_6_aliases[] = {"ISO8859-6", "arabic", NULL}; - -const mbfl_encoding mbfl_encoding_8859_6 = { - mbfl_no_encoding_8859_6, - "ISO-8859-6", - "ISO-8859-6", - (const char *(*)[])&mbfl_encoding_8859_6_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_6_wchar, - &vtbl_wchar_8859_6 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_6 = { - mbfl_no_encoding_8859_6, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_6_wchar = { - mbfl_no_encoding_8859_6, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_6_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_6 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_6, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_6, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-6 => wchar - */ -int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_6_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_6; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-6 - */ -int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_6_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_6) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h deleted file mode 100644 index c7e16c7e0b..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_6_H -#define MBFL_MBFILTER_ISO8859_6_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_6; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_6; -extern const struct mbfl_convert_vtbl vtbl_8859_6_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_6; - -int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_6_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c deleted file mode 100644 index 73ead533ea..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_7.h" -#include "unicode_table_iso8859_7.h" - -static const char *mbfl_encoding_8859_7_aliases[] = {"ISO8859-7", "greek", NULL}; - -const mbfl_encoding mbfl_encoding_8859_7 = { - mbfl_no_encoding_8859_7, - "ISO-8859-7", - "ISO-8859-7", - (const char *(*)[])&mbfl_encoding_8859_7_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_7_wchar, - &vtbl_wchar_8859_7 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_7 = { - mbfl_no_encoding_8859_7, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_7_wchar = { - mbfl_no_encoding_8859_7, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_7_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_7 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_7, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_7, - mbfl_filt_conv_common_flush, - NULL, -}; - - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-7 => wchar - */ -int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_7_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_7; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-7 - */ -int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_7_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_7) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h deleted file mode 100644 index 8421edb929..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_7_H -#define MBFL_MBFILTER_ISO8859_7_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_7; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_7; -extern const struct mbfl_convert_vtbl vtbl_8859_7_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_7; - -int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_7_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c deleted file mode 100644 index 05ca13f330..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_8.h" -#include "unicode_table_iso8859_8.h" - -static const char *mbfl_encoding_8859_8_aliases[] = {"ISO8859-8", "hebrew", NULL}; - -const mbfl_encoding mbfl_encoding_8859_8 = { - mbfl_no_encoding_8859_8, - "ISO-8859-8", - "ISO-8859-8", - (const char *(*)[])&mbfl_encoding_8859_8_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_8_wchar, - &vtbl_wchar_8859_8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_8 = { - mbfl_no_encoding_8859_8, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_8_wchar = { - mbfl_no_encoding_8859_8, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_8_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_8 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_8, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_8, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-8 => wchar - */ -int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_8_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_8; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-8 - */ -int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_8_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_8) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h deleted file mode 100644 index ee679814f1..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_8_H -#define MBFL_MBFILTER_ISO8859_8_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_8; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_8; -extern const struct mbfl_convert_vtbl vtbl_8859_8_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_8; - -int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_8_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c deleted file mode 100644 index 074f90bef2..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_iso8859_9.h" -#include "unicode_table_iso8859_9.h" - -static const char *mbfl_encoding_8859_9_aliases[] = {"ISO8859-9", "latin5", NULL}; - -const mbfl_encoding mbfl_encoding_8859_9 = { - mbfl_no_encoding_8859_9, - "ISO-8859-9", - "ISO-8859-9", - (const char *(*)[])&mbfl_encoding_8859_9_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_8859_9_wchar, - &vtbl_wchar_8859_9 -}; - -const struct mbfl_identify_vtbl vtbl_identify_8859_9 = { - mbfl_no_encoding_8859_9, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_true -}; - -const struct mbfl_convert_vtbl vtbl_8859_9_wchar = { - mbfl_no_encoding_8859_9, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_8859_9_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_wchar_8859_9 = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_8859_9, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_8859_9, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * ISO-8859-9 => wchar - */ -int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < 0xa0) { - s = c; - } else if (c >= 0xa0 && c < 0x100) { - s = iso8859_9_ucs_table[c - 0xa0]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_8859_9; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => ISO-8859-9 - */ -int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c >= 0 && c < 0xa0) { - s = c; - } else { - s = -1; - n = 95; - while (n >= 0) { - if (c == iso8859_9_ucs_table[n]) { - s = 0xa0 + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_9) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h deleted file mode 100644 index 5a61237113..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_ISO8859_9_H -#define MBFL_MBFILTER_ISO8859_9_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_8859_9; -extern const struct mbfl_identify_vtbl vtbl_identify_8859_9; -extern const struct mbfl_convert_vtbl vtbl_8859_9_wchar; -extern const struct mbfl_convert_vtbl vtbl_wchar_8859_9; - -int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_ISO8859_9_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.c b/ext/mbstring/libmbfl/filters/mbfilter_jis.c index b08eec38b0..ba43872d83 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_jis.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_jis.c @@ -33,9 +33,6 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter); -static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter); - const mbfl_encoding mbfl_encoding_jis = { mbfl_no_encoding_jis, "JIS", @@ -58,18 +55,6 @@ const mbfl_encoding mbfl_encoding_2022jp = { &vtbl_wchar_2022jp }; -const struct mbfl_identify_vtbl vtbl_identify_jis = { - mbfl_no_encoding_jis, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_jis -}; - -const struct mbfl_identify_vtbl vtbl_identify_2022jp = { - mbfl_no_encoding_2022jp, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_2022jp -}; - const struct mbfl_convert_vtbl vtbl_jis_wchar = { mbfl_no_encoding_jis, mbfl_no_encoding_wchar, @@ -483,177 +468,3 @@ mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter) return 0; } - -static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x20: X 0201 kana */ -/* case 0x80: X 0208 */ -/* case 0x90: X 0212 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (c == 0x0e) { /* "kana in" */ - filter->status = 0x20; - } else if (c == 0x0f) { /* "kana out" */ - filter->status = 0; - } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ -/* case 0x91: X 0212 second char */ - case 1: - filter->status &= ~0xf; - if (c == 0x1b) { - goto retry; - } else if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x28) { /* '(' */ - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ ( */ - case 4: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else if (c == 0x44) { /* 'D' */ - filter->status = 0x90; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else if (c == 0x49) { /* 'I' */ - filter->status = 0x20; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} - -static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter) -{ -retry: - switch (filter->status & 0xf) { -/* case 0x00: ASCII */ -/* case 0x10: X 0201 latin */ -/* case 0x80: X 0208 */ - case 0: - if (c == 0x1b) { - filter->status += 2; - } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ - filter->status += 1; - } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ - ; - } else { - filter->flag = 1; /* bad */ - } - break; - -/* case 0x81: X 0208 second char */ - case 1: - if (c == 0x1b) { - filter->status++; - } else { - filter->status &= ~0xf; - if (c < 0x21 || c > 0x7e) { /* bad */ - filter->flag = 1; - } - } - break; - - /* ESC */ - case 2: - if (c == 0x24) { /* '$' */ - filter->status++; - } else if (c == 0x28) { /* '(' */ - filter->status += 3; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC $ */ - case 3: - if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ - filter->status = 0x80; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - /* ESC ( */ - case 5: - if (c == 0x42) { /* 'B' */ - filter->status = 0; - } else if (c == 0x4a) { /* 'J' */ - filter->status = 0x10; - } else { - filter->flag = 1; /* bad */ - filter->status &= ~0xf; - goto retry; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.h b/ext/mbstring/libmbfl/filters/mbfilter_jis.h index e7a164167e..55787c9acb 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_jis.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_jis.h @@ -34,8 +34,6 @@ extern const mbfl_encoding mbfl_encoding_jis; extern const mbfl_encoding mbfl_encoding_2022jp; -extern const struct mbfl_identify_vtbl vtbl_identify_2022jp; -extern const struct mbfl_identify_vtbl vtbl_identify_jis; extern const struct mbfl_convert_vtbl vtbl_jis_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_jis; extern const struct mbfl_convert_vtbl vtbl_2022jp_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c deleted file mode 100644 index 7790be65bb..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.c - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#include "mbfilter.h" -#include "mbfilter_koi8r.h" -#include "unicode_table_koi8r.h" - -static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL}; - -const mbfl_encoding mbfl_encoding_koi8r = { - mbfl_no_encoding_koi8r, - "KOI8-R", - "KOI8-R", - (const char *(*)[])&mbfl_encoding_koi8r_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_koi8r_wchar, - &vtbl_wchar_koi8r -}; - -const struct mbfl_identify_vtbl vtbl_identify_koi8r = { - mbfl_no_encoding_koi8r, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_koi8r -}; - -const struct mbfl_convert_vtbl vtbl_wchar_koi8r = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_koi8r, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_koi8r, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_koi8r_wchar = { - mbfl_no_encoding_koi8r, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_koi8r_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * koi8r => wchar - */ -int -mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < koi8r_ucs_table_min) { - s = c; - } else if (c >= koi8r_ucs_table_min && c < 0x100) { - s = koi8r_ucs_table[c - koi8r_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_KOI8R; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => koi8r - */ -int -mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = koi8r_ucs_table_len-1; - while (n >= 0) { - if (c == koi8r_ucs_table[n]) { - s = koi8r_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8R) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h deleted file mode 100644 index 6073d140ae..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * - */ -/* - * The source code included in this files was separated from mbfilter_ru.h - * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. - * - */ - -#ifndef MBFL_MBFILTER_KOI8R_H -#define MBFL_MBFILTER_KOI8R_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_koi8r; -extern const struct mbfl_identify_vtbl vtbl_identify_koi8r; -extern const struct mbfl_convert_vtbl vtbl_wchar_koi8r; -extern const struct mbfl_convert_vtbl vtbl_koi8r_wchar; - -int mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_KOI8R_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c deleted file mode 100644 index a62a1c596b..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Maksym Veremeyenko <verem@m1.tv> - * - * Based on mbfilter_koi8r.c code - * - */ - -#include "mbfilter.h" -#include "mbfilter_koi8u.h" -#include "unicode_table_koi8u.h" - -static int mbfl_filt_ident_koi8u(int c, mbfl_identify_filter *filter); - -static const char *mbfl_encoding_koi8u_aliases[] = {"KOI8-U", "KOI8U", NULL}; - -const mbfl_encoding mbfl_encoding_koi8u = { - mbfl_no_encoding_koi8u, - "KOI8-U", - "KOI8-U", - (const char *(*)[])&mbfl_encoding_koi8u_aliases, - NULL, - MBFL_ENCTYPE_SBCS, - &vtbl_koi8u_wchar, - &vtbl_wchar_koi8u -}; - -const struct mbfl_identify_vtbl vtbl_identify_koi8u = { - mbfl_no_encoding_koi8u, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_koi8u -}; - -const struct mbfl_convert_vtbl vtbl_wchar_koi8u = { - mbfl_no_encoding_wchar, - mbfl_no_encoding_koi8u, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_wchar_koi8u, - mbfl_filt_conv_common_flush, - NULL, -}; - -const struct mbfl_convert_vtbl vtbl_koi8u_wchar = { - mbfl_no_encoding_koi8u, - mbfl_no_encoding_wchar, - mbfl_filt_conv_common_ctor, - NULL, - mbfl_filt_conv_koi8u_wchar, - mbfl_filt_conv_common_flush, - NULL, -}; - -#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) - -/* - * koi8u => wchar - */ -int -mbfl_filt_conv_koi8u_wchar(int c, mbfl_convert_filter *filter) -{ - int s; - - if (c >= 0 && c < koi8u_ucs_table_min) { - s = c; - } else if (c >= koi8u_ucs_table_min && c < 0x100) { - s = koi8u_ucs_table[c - koi8u_ucs_table_min]; - if (s <= 0) { - s = c; - s &= MBFL_WCSPLANE_MASK; - s |= MBFL_WCSPLANE_KOI8U; - } - } else { - s = c; - s &= MBFL_WCSGROUP_MASK; - s |= MBFL_WCSGROUP_THROUGH; - } - - CK((*filter->output_function)(s, filter->data)); - - return c; -} - -/* - * wchar => koi8u - */ -int -mbfl_filt_conv_wchar_koi8u(int c, mbfl_convert_filter *filter) -{ - int s, n; - - if (c < 0x80) { - s = c; - } else { - s = -1; - n = koi8u_ucs_table_len-1; - while (n >= 0) { - if (c == koi8u_ucs_table[n]) { - s = koi8u_ucs_table_min + n; - break; - } - n--; - } - if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8U) { - s = c & MBFL_WCSPLANE_MASK; - } - } - - if (s >= 0) { - CK((*filter->output_function)(s, filter->data)); - } else { - CK(mbfl_filt_conv_illegal_output(c, filter)); - } - - return c; -} - -static int mbfl_filt_ident_koi8u(int c, mbfl_identify_filter *filter) -{ - if (c >= 0x80 && c < 0xff) - filter->flag = 0; - else - filter->flag = 1; /* not it */ - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h deleted file mode 100644 index 16b95c1fc4..0000000000 --- a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Maksym Veremeyenko <verem@m1.tv> - * - * Based on mbfilter_koi8r.h code - * - */ - -#ifndef MBFL_MBFILTER_KOI8U_H -#define MBFL_MBFILTER_KOI8U_H - -#include "mbfilter.h" - -extern const mbfl_encoding mbfl_encoding_koi8u; -extern const struct mbfl_identify_vtbl vtbl_identify_koi8u; -extern const struct mbfl_convert_vtbl vtbl_wchar_koi8u; -extern const struct mbfl_convert_vtbl vtbl_koi8u_wchar; - -int mbfl_filt_conv_koi8u_wchar(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_wchar_koi8u(int c, mbfl_convert_filter *filter); - -#endif /* MBFL_MBFILTER_KOI8U_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c index d42cdca883..8f806def25 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c @@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_qprint = { mbfl_no_encoding_qprint, "Quoted-Printable", "Quoted-Printable", - (const char *(*)[])&mbfl_encoding_qprint_aliases, + mbfl_encoding_qprint_aliases, NULL, MBFL_ENCTYPE_GL_UNSAFE, NULL, @@ -110,8 +110,7 @@ int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter) } if (s <= 0 || s >= 0x80 || s == 0x3d /* not ASCII or '=' */ - || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) != 0 && - (mbfl_charprop_table[s] & MBFL_CHP_MMHQENC) != 0)) { + || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) && mime_char_needs_qencode[s])) { /* hex-octet */ CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ n = (s >> 4) & 0xf; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c new file mode 100644 index 0000000000..7e7bdfbfaa --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.c @@ -0,0 +1,581 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.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. | + +----------------------------------------------------------------------+ +*/ + +#include "mbfilter_singlebyte.h" + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* Helper for single-byte encodings which use a conversion table */ +static int mbfl_conv_singlebyte_table(int c, mbfl_convert_filter *filter, int tbl_min, const unsigned short tbl[]) +{ + if (c < tbl_min) { + CK((*filter->output_function)(c, filter->data)); + } else { + int s = tbl[c - tbl_min]; + if (!s) { + s = c | MBFL_WCSGROUP_THROUGH; + } + CK((*filter->output_function)(s, filter->data)); + } + return c; +} + +static int mbfl_conv_reverselookup_table(int c, mbfl_convert_filter *filter, int tbl_min, const unsigned short tbl[]) +{ + if (c < tbl_min) { + CK((*filter->output_function)(c, filter->data)); + } else { + for (int i = 0; i < 256 - tbl_min; i++) { + if (c == tbl[i]) { + CK((*filter->output_function)(i + tbl_min, filter->data)); + return c; + } + } + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +/* Initialize data structures for a single-byte encoding */ +#define DEF_SB(id, name, mime_name, aliases) \ + static int mbfl_filt_conv_##id##_wchar(int c, mbfl_convert_filter *filter); \ + static int mbfl_filt_conv_wchar_##id(int c, mbfl_convert_filter *filter); \ + static const struct mbfl_convert_vtbl vtbl_##id##_wchar = { \ + mbfl_no_encoding_##id, \ + mbfl_no_encoding_wchar, \ + mbfl_filt_conv_common_ctor, \ + NULL, \ + mbfl_filt_conv_##id##_wchar, \ + mbfl_filt_conv_common_flush, \ + NULL \ + }; \ + static const struct mbfl_convert_vtbl vtbl_wchar_##id = { \ + mbfl_no_encoding_wchar, \ + mbfl_no_encoding_##id, \ + mbfl_filt_conv_common_ctor, \ + NULL, \ + mbfl_filt_conv_wchar_##id, \ + mbfl_filt_conv_common_flush, \ + NULL \ + }; \ + const mbfl_encoding mbfl_encoding_##id = { \ + mbfl_no_encoding_##id, \ + name, \ + mime_name, \ + aliases, \ + NULL, \ + MBFL_ENCTYPE_SBCS, \ + &vtbl_##id##_wchar, \ + &vtbl_wchar_##id \ + } + +/* For single-byte encodings which use a conversion table */ +#define DEF_SB_TBL(id, name, mime_name, aliases, tbl_min, tbl) \ + static int mbfl_filt_conv_##id##_wchar(int c, mbfl_convert_filter *filter) { \ + return mbfl_conv_singlebyte_table(c, filter, tbl_min, tbl); \ + } \ + static int mbfl_filt_conv_wchar_##id(int c, mbfl_convert_filter *filter) { \ + return mbfl_conv_reverselookup_table(c, filter, tbl_min, tbl); \ + } \ + DEF_SB(id, name, mime_name, aliases) + +/* The grand-daddy of them all: ASCII */ +static const char *ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL}; +DEF_SB(ascii, "ASCII", "US-ASCII", ascii_aliases); + +static int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter) +{ + if (c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +static int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter) +{ + if (c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +/* ISO-8859-X */ + +static const char *iso8859_1_aliases[] = {"ISO8859-1", "latin1", NULL}; +DEF_SB(8859_1, "ISO-8859-1", "ISO-8859-1", iso8859_1_aliases); + +static int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter) +{ + return (*filter->output_function)(c, filter->data); +} + +static int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter) +{ + if (c < 0x100) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +static const char *iso8859_2_aliases[] = {"ISO8859-2", "latin2", NULL}; +static const unsigned short iso8859_2_ucs_table[] = { + 0X00A0, 0X0104, 0X02D8, 0X0141, 0X00A4, 0X013D, 0X015A, 0X00A7, + 0X00A8, 0X0160, 0X015E, 0X0164, 0X0179, 0X00AD, 0X017D, 0X017B, + 0X00B0, 0X0105, 0X02DB, 0X0142, 0X00B4, 0X013E, 0X015B, 0X02C7, + 0X00B8, 0X0161, 0X015F, 0X0165, 0X017A, 0X02DD, 0X017E, 0X017C, + 0X0154, 0X00C1, 0X00C2, 0X0102, 0X00C4, 0X0139, 0X0106, 0X00C7, + 0X010C, 0X00C9, 0X0118, 0X00CB, 0X011A, 0X00CD, 0X00CE, 0X010E, + 0X0110, 0X0143, 0X0147, 0X00D3, 0X00D4, 0X0150, 0X00D6, 0X00D7, + 0X0158, 0X016E, 0X00DA, 0X0170, 0X00DC, 0X00DD, 0X0162, 0X00DF, + 0X0155, 0X00E1, 0X00E2, 0X0103, 0X00E4, 0X013A, 0X0107, 0X00E7, + 0X010D, 0X00E9, 0X0119, 0X00EB, 0X011B, 0X00ED, 0X00EE, 0X010F, + 0X0111, 0X0144, 0X0148, 0X00F3, 0X00F4, 0X0151, 0X00F6, 0X00F7, + 0X0159, 0X016F, 0X00FA, 0X0171, 0X00FC, 0X00FD, 0X0163, 0X02D9 +}; +DEF_SB_TBL(8859_2, "ISO-8859-2", "ISO-8859-2", iso8859_2_aliases, 0xA0, iso8859_2_ucs_table); + +static const char *iso8859_3_aliases[] = {"ISO8859-3", "latin3", NULL}; +static const unsigned short iso8859_3_ucs_table[] = { + 0X00A0, 0X0126, 0X02D8, 0X00A3, 0X00A4, 0X0000, 0X0124, 0X00A7, + 0X00A8, 0X0130, 0X015E, 0X011E, 0X0134, 0X00AD, 0X0000, 0X017B, + 0X00B0, 0X0127, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X0125, 0X00B7, + 0X00B8, 0X0131, 0X015F, 0X011F, 0X0135, 0X00BD, 0X0000, 0X017C, + 0X00C0, 0X00C1, 0X00C2, 0X0000, 0X00C4, 0X010A, 0X0108, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X0000, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X0120, 0X00D6, 0X00D7, + 0X011C, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X016C, 0X015C, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X0000, 0X00E4, 0X010B, 0X0109, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X0000, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X0121, 0X00F6, 0X00F7, + 0X011D, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X016D, 0X015D, 0X02D9 +}; +DEF_SB_TBL(8859_3, "ISO-8859-3", "ISO-8859-3", iso8859_3_aliases, 0xA0, iso8859_3_ucs_table); + +static const char *iso8859_4_aliases[] = {"ISO8859-4", "latin4", NULL}; +static const unsigned short iso8859_4_ucs_table[] = { + 0X00A0, 0X0104, 0X0138, 0X0156, 0X00A4, 0X0128, 0X013B, 0X00A7, + 0X00A8, 0X0160, 0X0112, 0X0122, 0X0166, 0X00AD, 0X017D, 0X00AF, + 0X00B0, 0X0105, 0X02DB, 0X0157, 0X00B4, 0X0129, 0X013C, 0X02C7, + 0X00B8, 0X0161, 0X0113, 0X0123, 0X0167, 0X014A, 0X017E, 0X014B, + 0X0100, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X012E, + 0X010C, 0X00C9, 0X0118, 0X00CB, 0X0116, 0X00CD, 0X00CE, 0X012A, + 0X0110, 0X0145, 0X014C, 0X0136, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X0172, 0X00DA, 0X00DB, 0X00DC, 0X0168, 0X016A, 0X00DF, + 0X0101, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X012F, + 0X010D, 0X00E9, 0X0119, 0X00EB, 0X0117, 0X00ED, 0X00EE, 0X012B, + 0X0111, 0X0146, 0X014D, 0X0137, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X0173, 0X00FA, 0X00FB, 0X00FC, 0X0169, 0X016B, 0X02D9 +}; +DEF_SB_TBL(8859_4, "ISO-8859-4", "ISO-8859-4", iso8859_4_aliases, 0xA0, iso8859_4_ucs_table); + +static const char *iso8859_5_aliases[] = {"ISO8859-5", "cyrillic", NULL}; +static const unsigned short iso8859_5_ucs_table[] = { + 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f +}; +DEF_SB_TBL(8859_5, "ISO-8859-5", "ISO-8859-5", iso8859_5_aliases, 0xA0, iso8859_5_ucs_table); + +static const char *iso8859_6_aliases[] = {"ISO8859-6", "arabic", NULL}; +static const unsigned short iso8859_6_ucs_table[] = { + 0X00A0, 0X0000, 0X0000, 0X0000, 0X00A4, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X060C, 0X00AD, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X061B, 0X0000, 0X0000, 0X0000, 0X061F, + 0X0000, 0X0621, 0X0622, 0X0623, 0X0624, 0X0625, 0X0626, 0X0627, + 0X0628, 0X0629, 0X062A, 0X062B, 0X062C, 0X062D, 0X062E, 0X062F, + 0X0630, 0X0631, 0X0632, 0X0633, 0X0634, 0X0635, 0X0636, 0X0637, + 0X0638, 0X0639, 0X063A, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0640, 0X0641, 0X0642, 0X0643, 0X0644, 0X0645, 0X0646, 0X0647, + 0X0648, 0X0649, 0X064A, 0X064B, 0X064C, 0X064D, 0X064E, 0X064F, + 0X0650, 0X0651, 0X0652, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000 +}; +DEF_SB_TBL(8859_6, "ISO-8859-6", "ISO-8859-6", iso8859_6_aliases, 0xA0, iso8859_6_ucs_table); + +static const char *iso8859_7_aliases[] = {"ISO8859-7", "greek", NULL}; +static const unsigned short iso8859_7_ucs_table[] = { + 0X00A0, 0X2018, 0X2019, 0X00A3, 0X20AC, 0X20AF, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X037A, 0X00AB, 0X00AC, 0X00AD, 0X0000, 0X2015, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X0384, 0X0385, 0X0386, 0X00B7, + 0X0388, 0X0389, 0X038A, 0X00BB, 0X038C, 0X00BD, 0X038E, 0X038F, + 0X0390, 0X0391, 0X0392, 0X0393, 0X0394, 0X0395, 0X0396, 0X0397, + 0X0398, 0X0399, 0X039A, 0X039B, 0X039C, 0X039D, 0X039E, 0X039F, + 0X03A0, 0X03A1, 0X0000, 0X03A3, 0X03A4, 0X03A5, 0X03A6, 0X03A7, + 0X03A8, 0X03A9, 0X03AA, 0X03AB, 0X03AC, 0X03AD, 0X03AE, 0X03AF, + 0X03B0, 0X03B1, 0X03B2, 0X03B3, 0X03B4, 0X03B5, 0X03B6, 0X03B7, + 0X03B8, 0X03B9, 0X03BA, 0X03BB, 0X03BC, 0X03BD, 0X03BE, 0X03BF, + 0X03C0, 0X03C1, 0X03C2, 0X03C3, 0X03C4, 0X03C5, 0X03C6, 0X03C7, + 0X03C8, 0X03C9, 0X03CA, 0X03CB, 0X03CC, 0X03CD, 0X03CE, 0X0000 +}; +DEF_SB_TBL(8859_7, "ISO-8859-7", "ISO-8859-7", iso8859_7_aliases, 0xA0, iso8859_7_ucs_table); + +static const char *iso8859_8_aliases[] = {"ISO8859-8", "hebrew", NULL}; +static const unsigned short iso8859_8_ucs_table[] = { + 0X00A0, 0X0000, 0X00A2, 0X00A3, 0X00A4, 0X00A5, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X00D7, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X00B6, 0X00B7, + 0X00B8, 0X00B9, 0X00F7, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, + 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X2017, + 0X05D0, 0X05D1, 0X05D2, 0X05D3, 0X05D4, 0X05D5, 0X05D6, 0X05D7, + 0X05D8, 0X05D9, 0X05DA, 0X05DB, 0X05DC, 0X05DD, 0X05DE, 0X05DF, + 0X05E0, 0X05E1, 0X05E2, 0X05E3, 0X05E4, 0X05E5, 0X05E6, 0X05E7, + 0X05E8, 0X05E9, 0X05EA, 0X0000, 0X0000, 0X200E, 0X200F, 0X0000 +}; +DEF_SB_TBL(8859_8, "ISO-8859-8", "ISO-8859-8", iso8859_8_aliases, 0xA0, iso8859_8_ucs_table); + +static const char *iso8859_9_aliases[] = {"ISO8859-9", "latin5", NULL}; +static const unsigned short iso8859_9_ucs_table[] = { + 0X00A0, 0X00A1, 0X00A2, 0X00A3, 0X00A4, 0X00A5, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X00AA, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X00B6, 0X00B7, + 0X00B8, 0X00B9, 0X00BA, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X00BF, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X011E, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X0130, 0X015E, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X011F, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X0131, 0X015F, 0X00FF +}; +DEF_SB_TBL(8859_9, "ISO-8859-9", "ISO-8859-9", iso8859_9_aliases, 0xA0, iso8859_9_ucs_table); + +static const char *iso8859_10_aliases[] = {"ISO8859-10", "latin6", NULL}; +static const unsigned short iso8859_10_ucs_table[] = { + 0X00A0, 0X0104, 0X0112, 0X0122, 0X012A, 0X0128, 0X0136, 0X00A7, + 0X013B, 0X0110, 0X0160, 0X0166, 0X017D, 0X00AD, 0X016A, 0X014A, + 0X00B0, 0X0105, 0X0113, 0X0123, 0X012B, 0X0129, 0X0137, 0X00B7, + 0X013C, 0X0111, 0X0161, 0X0167, 0X017E, 0X2015, 0X016B, 0X014B, + 0X0100, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X012E, + 0X010C, 0X00C9, 0X0118, 0X00CB, 0X0116, 0X00CD, 0X00CE, 0X00CF, + 0X00D0, 0X0145, 0X014C, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X0168, + 0X00D8, 0X0172, 0X00DA, 0X00DB, 0X00DC, 0X00DD, 0X00DE, 0X00DF, + 0X0101, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X012F, + 0X010D, 0X00E9, 0X0119, 0X00EB, 0X0117, 0X00ED, 0X00EE, 0X00EF, + 0X00F0, 0X0146, 0X014D, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X0169, + 0X00F8, 0X0173, 0X00FA, 0X00FB, 0X00FC, 0X00FD, 0X00FE, 0X0138 +}; +DEF_SB_TBL(8859_10, "ISO-8859-10", "ISO-8859-10", iso8859_10_aliases, 0xA0, iso8859_10_ucs_table); + +static const char *iso8859_13_aliases[] = {"ISO8859-13", NULL}; +static const unsigned short iso8859_13_ucs_table[] = { + 0X00A0, 0X201D, 0X00A2, 0X00A3, 0X00A4, 0X201E, 0X00A6, 0X00A7, + 0X00D8, 0X00A9, 0X0156, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00C6, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X201C, 0X00B5, 0X00B6, 0X00B7, + 0X00F8, 0X00B9, 0X0157, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X00E6, + 0X0104, 0X012E, 0X0100, 0X0106, 0X00C4, 0X00C5, 0X0118, 0X0112, + 0X010C, 0X00C9, 0X0179, 0X0116, 0X0122, 0X0136, 0X012A, 0X013B, + 0X0160, 0X0143, 0X0145, 0X00D3, 0X014C, 0X00D5, 0X00D6, 0X00D7, + 0X0172, 0X0141, 0X015A, 0X016A, 0X00DC, 0X017B, 0X017D, 0X00DF, + 0X0105, 0X012F, 0X0101, 0X0107, 0X00E4, 0X00E5, 0X0119, 0X0113, + 0X010D, 0X00E9, 0X017A, 0X0117, 0X0123, 0X0137, 0X012B, 0X013C, + 0X0161, 0X0144, 0X0146, 0X00F3, 0X014D, 0X00F5, 0X00F6, 0X00F7, + 0X0173, 0X0142, 0X015B, 0X016B, 0X00FC, 0X017C, 0X017E, 0X2019 +}; +DEF_SB_TBL(8859_13, "ISO-8859-13", "ISO-8859-13", iso8859_13_aliases, 0xA0, iso8859_13_ucs_table); + +static const char *iso8859_14_aliases[] = {"ISO8859-14", "latin8", NULL}; +static const unsigned short iso8859_14_ucs_table[] = { + 0X00A0, 0X1E02, 0X1E03, 0X00A3, 0X010A, 0X010B, 0X1E0A, 0X00A7, + 0X1E80, 0X00A9, 0X1E82, 0X1E0B, 0X1EF2, 0X00AD, 0X00AE, 0X0178, + 0X1E1E, 0X1E1F, 0X0120, 0X0121, 0X1E40, 0X1E41, 0X00B6, 0X1E56, + 0X1E81, 0X1E57, 0X1E83, 0X1E60, 0X1EF3, 0X1E84, 0X1E85, 0X1E61, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X0174, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X1E6A, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X00DD, 0X0176, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X0175, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X1E6B, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X00FD, 0X0177, 0X00FF +}; +DEF_SB_TBL(8859_14, "ISO-8859-14", "ISO-8859-14", iso8859_14_aliases, 0xA0, iso8859_14_ucs_table); + +static const char *iso8859_15_aliases[] = {"ISO8859-15", NULL}; +static const unsigned short iso8859_15_ucs_table[] = { + 0X00A0, 0X00A1, 0X00A2, 0X00A3, 0X20AC, 0X00A5, 0X0160, 0X00A7, + 0X0161, 0X00A9, 0X00AA, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X017D, 0X00B5, 0X00B6, 0X00B7, + 0X017E, 0X00B9, 0X00BA, 0X00BB, 0X0152, 0X0153, 0X0178, 0X00BF, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X00D0, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X00DD, 0X00DE, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X00F0, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X00FD, 0X00FE, 0X00FF +}; +DEF_SB_TBL(8859_15, "ISO-8859-15", "ISO-8859-15", iso8859_15_aliases, 0xA0, iso8859_15_ucs_table); + +static const char *iso8859_16_aliases[] = {"ISO8859-16", NULL}; +static const unsigned short iso8859_16_ucs_table[] = { + 0X00A0, 0X0104, 0X0105, 0X0141, 0X20AC, 0X201E, 0X0160, 0X00A7, + 0X0161, 0X00A9, 0X0218, 0X00AB, 0X0179, 0X00AD, 0X017A, 0X017B, + 0X00B0, 0X00B1, 0X010C, 0X0142, 0X017D, 0X201D, 0X00B6, 0X00B7, + 0X017E, 0X010D, 0X0219, 0X00BB, 0X0152, 0X0153, 0X0178, 0X017C, + 0X00C0, 0X00C1, 0X00C2, 0X0102, 0X00C4, 0X0106, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X0110, 0X0143, 0X00D2, 0X00D3, 0X00D4, 0X0150, 0X00D6, 0X015A, + 0X0170, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X0118, 0X021A, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X0103, 0X00E4, 0X0107, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X0111, 0X0144, 0X00F2, 0X00F3, 0X00F4, 0X0151, 0X00F6, 0X015B, + 0X0171, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X0119, 0X021B, 0X00FF +}; +DEF_SB_TBL(8859_16, "ISO-8859-16", "ISO-8859-16", iso8859_16_aliases, 0xA0, iso8859_16_ucs_table); + +static const char *cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL}; +static const unsigned short cp1251_ucs_table[] = { + 0X0402, 0X0403, 0X201A, 0X0453, 0X201E, 0X2026, 0X2020, 0X2021, + 0X20AC, 0X2030, 0X0409, 0X2039, 0X040A, 0X040C, 0X040B, 0X040F, + 0X0452, 0X2018, 0X2019, 0X201C, 0X201D, 0X2022, 0X2013, 0X2014, + 0X0000, 0X2122, 0X0459, 0X203A, 0X045A, 0X045C, 0X045B, 0X045F, + 0X00A0, 0X040E, 0X045E, 0X0408, 0X00A4, 0X0490, 0X00A6, 0X00A7, + 0X0401, 0X00A9, 0X0404, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X0407, + 0X00B0, 0X00B1, 0X0406, 0X0456, 0X0491, 0X00B5, 0X00B6, 0X00B7, + 0X0451, 0X2116, 0X0454, 0X00BB, 0X0458, 0X0405, 0X0455, 0X0457, + 0X0410, 0X0411, 0X0412, 0X0413, 0X0414, 0X0415, 0X0416, 0X0417, + 0X0418, 0X0419, 0X041A, 0X041B, 0X041C, 0X041D, 0X041E, 0X041F, + 0X0420, 0X0421, 0X0422, 0X0423, 0X0424, 0X0425, 0X0426, 0X0427, + 0X0428, 0X0429, 0X042A, 0X042B, 0X042C, 0X042D, 0X042E, 0X042F, + 0X0430, 0X0431, 0X0432, 0X0433, 0X0434, 0X0435, 0X0436, 0X0437, + 0X0438, 0X0439, 0X043A, 0X043B, 0X043C, 0X043D, 0X043E, 0X043F, + 0X0440, 0X0441, 0X0442, 0X0443, 0X0444, 0X0445, 0X0446, 0X0447, + 0X0448, 0X0449, 0X044A, 0X044B, 0X044C, 0X044D, 0X044E, 0X044F +}; +DEF_SB_TBL(cp1251, "Windows-1251", "Windows-1251", cp1251_aliases, 0x80, cp1251_ucs_table); + +static const char *cp1252_aliases[] = {"cp1252", NULL}; +static const unsigned short cp1252_ucs_table[] = { + 0X20AC,0X0000,0X201A,0X0192,0X201E,0X2026,0X2020,0X2021, + 0X02C6,0X2030,0X0160,0X2039,0X0152,0X0000,0X017D,0X0000, + 0X0000,0X2018,0X2019,0X201C,0X201D,0X2022,0X2013,0X2014, + 0X02DC,0X2122,0X0161,0X203A,0X0153,0X0000,0X017E,0X0178 +}; +DEF_SB(cp1252, "Windows-1252", "Windows-1252", cp1252_aliases); + +static int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter) +{ + if (c >= 0x100) { + for (int n = 0; n < 32; n++) { + if (c == cp1252_ucs_table[n]) { + CK((*filter->output_function)(0x80 + n, filter->data)); + return c; + } + } + CK(mbfl_filt_conv_illegal_output(c, filter)); + } else if (c <= 0x7F || c >= 0xA0) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} + +static int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0x80 && c < 0xA0) { + s = cp1252_ucs_table[c - 0x80]; + if (!s) { + s = c | MBFL_WCSGROUP_THROUGH; + } + } else { + s = c; + } + + CK((*filter->output_function)(s, filter->data)); + return c; +} + +static const char *cp1254_aliases[] = {"CP1254", "CP-1254", "WINDOWS-1254", NULL}; +static const unsigned short cp1254_ucs_table[] = { + 0X20AC, 0X0000, 0X201A, 0X0192, 0X201E, 0X2026, 0X2020, 0X2021, + 0X02C6, 0X2030, 0X0160, 0X2039, 0X0152, 0X0000, 0X0000, 0X0000, + 0X0000, 0X2018, 0X2019, 0X201C, 0X201D, 0X2022, 0X2013, 0X2014, + 0X02DC, 0X2122, 0X0161, 0X203A, 0X0153, 0X0000, 0X0000, 0X0178, + 0X00A0, 0X00A1, 0X00A2, 0X00A3, 0X00A4, 0X00A5, 0X00A6, 0X00A7, + 0X00A8, 0X00A9, 0X00AA, 0X00AB, 0X00AC, 0X00AD, 0X00AE, 0X00AF, + 0X00B0, 0X00B1, 0X00B2, 0X00B3, 0X00B4, 0X00B5, 0X00B6, 0X00B7, + 0X00B8, 0X00B9, 0X00BA, 0X00BB, 0X00BC, 0X00BD, 0X00BE, 0X00BF, + 0X00C0, 0X00C1, 0X00C2, 0X00C3, 0X00C4, 0X00C5, 0X00C6, 0X00C7, + 0X00C8, 0X00C9, 0X00CA, 0X00CB, 0X00CC, 0X00CD, 0X00CE, 0X00CF, + 0X011E, 0X00D1, 0X00D2, 0X00D3, 0X00D4, 0X00D5, 0X00D6, 0X00D7, + 0X00D8, 0X00D9, 0X00DA, 0X00DB, 0X00DC, 0X0130, 0X015E, 0X00DF, + 0X00E0, 0X00E1, 0X00E2, 0X00E3, 0X00E4, 0X00E5, 0X00E6, 0X00E7, + 0X00E8, 0X00E9, 0X00EA, 0X00EB, 0X00EC, 0X00ED, 0X00EE, 0X00EF, + 0X011F, 0X00F1, 0X00F2, 0X00F3, 0X00F4, 0X00F5, 0X00F6, 0X00F7, + 0X00F8, 0X00F9, 0X00FA, 0X00FB, 0X00FC, 0X0131, 0X015F, 0X00FF +}; +DEF_SB_TBL(cp1254, "Windows-1254", "Windows-1254", cp1254_aliases, 0x80, cp1254_ucs_table); + +static const char *cp866_aliases[] = {"CP-866", "IBM866", "IBM-866", NULL}; +static const unsigned short cp866_ucs_table[] = { + 0X0410, 0X0411, 0X0412, 0X0413, 0X0414, 0X0415, 0X0416, 0X0417, + 0X0418, 0X0419, 0X041A, 0X041B, 0X041C, 0X041D, 0X041E, 0X041F, + 0X0420, 0X0421, 0X0422, 0X0423, 0X0424, 0X0425, 0X0426, 0X0427, + 0X0428, 0X0429, 0X042A, 0X042B, 0X042C, 0X042D, 0X042E, 0X042F, + 0X0430, 0X0431, 0X0432, 0X0433, 0X0434, 0X0435, 0X0436, 0X0437, + 0X0438, 0X0439, 0X043A, 0X043B, 0X043C, 0X043D, 0X043E, 0X043F, + 0X2591, 0X2592, 0X2593, 0X2502, 0X2524, 0X2561, 0X2562, 0X2556, + 0X2555, 0X2563, 0X2551, 0X2557, 0X255D, 0X255C, 0X255B, 0X2510, + 0X2514, 0X2534, 0X252C, 0X251C, 0X2500, 0X253C, 0X255E, 0X255F, + 0X255A, 0X2554, 0X2569, 0X2566, 0X2560, 0X2550, 0X256C, 0X2567, + 0X2568, 0X2564, 0X2565, 0X2559, 0X2558, 0X2552, 0X2553, 0X256B, + 0X256A, 0X2518, 0X250C, 0X2588, 0X2584, 0X258C, 0X2590, 0X2580, + 0X0440, 0X0441, 0X0442, 0X0443, 0X0444, 0X0445, 0X0446, 0X0447, + 0X0448, 0X0449, 0X044A, 0X044B, 0X044C, 0X044D, 0X044E, 0X044F, + 0X0401, 0X0451, 0X0404, 0X0454, 0X0407, 0X0457, 0X040E, 0X045E, + 0X00B0, 0X2219, 0X00B7, 0X221A, 0X2116, 0X00A4, 0X25A0, 0X00A0 +}; +DEF_SB_TBL(cp866, "CP866", "CP866", cp866_aliases, 0x80, cp866_ucs_table); + +static const char *cp850_aliases[] = {"CP-850", "IBM850", "IBM-850", NULL}; +static const unsigned short cp850_ucs_table[] = { + 0X00C7, 0X00FC, 0X00E9, 0X00E2, 0X00E4, 0X00E0, 0X00E5, 0X00E7, + 0X00EA, 0X00EB, 0X00E8, 0X00EF, 0X00EE, 0X00EC, 0X00C4, 0X00C5, + 0X00C9, 0X00E6, 0X00C6, 0X00F4, 0X00F6, 0X00F2, 0X00FB, 0X00F9, + 0X00FF, 0X00D6, 0X00DC, 0X00F8, 0X00A3, 0X00D8, 0X00D7, 0X0192, + 0X00E1, 0X00ED, 0X00F3, 0X00FA, 0X00F1, 0X00D1, 0X00AA, 0X00BA, + 0X00BF, 0X00AE, 0X00AC, 0X00BD, 0X00BC, 0X00A1, 0X00AB, 0X00BB, + 0X2591, 0X2592, 0X2593, 0X2502, 0X2524, 0X00C1, 0X00C2, 0X00C0, + 0X00A9, 0X2563, 0X2551, 0X2557, 0X255D, 0X00A2, 0X00A5, 0X2510, + 0X2514, 0X2534, 0X252C, 0X251C, 0X2500, 0X253C, 0X00E3, 0X00C3, + 0X255A, 0X2554, 0X2569, 0X2566, 0X2560, 0X2550, 0X256C, 0X00A4, + 0X00F0, 0X00D0, 0X00CA, 0X00CB, 0X00C8, 0X0131, 0X00CD, 0X00CE, + 0X00CF, 0X2518, 0X250C, 0X2588, 0X2584, 0X00A6, 0X00CC, 0X2580, + 0X00D3, 0X00DF, 0X00D4, 0X00D2, 0X00F5, 0X00D5, 0X00B5, 0X00FE, + 0X00DE, 0X00DA, 0X00DB, 0X00D9, 0X00FD, 0X00DD, 0X00AF, 0X00B4, + 0X00AD, 0X00B1, 0X2017, 0X00BE, 0X00B6, 0X00A7, 0X00F7, 0X00B8, + 0X00B0, 0X00A8, 0X00B7, 0X00B9, 0X00B3, 0X00B2, 0X25A0, 0X00A0 +}; +DEF_SB_TBL(cp850, "CP850", "CP850", cp850_aliases, 0x80, cp850_ucs_table); + +static const char *koi8r_aliases[] = {"KOI8R", NULL}; +static const unsigned short koi8r_ucs_table[] = { + 0X2500, 0X2502, 0X250C, 0X2510, 0X2514, 0X2518, 0X251C, 0X2524, + 0X252C, 0X2534, 0X253C, 0X2580, 0X2584, 0X2588, 0X258C, 0X2590, + 0X2591, 0X2592, 0X2593, 0X2320, 0X25A0, 0X2219, 0X221A, 0X2248, + 0X2264, 0X2265, 0X00A0, 0X2321, 0X00B0, 0X00B2, 0X00B7, 0X00F7, + 0X2550, 0X2551, 0X2552, 0X0451, 0X2553, 0X2554, 0X2555, 0X2556, + 0X2557, 0X2558, 0X2559, 0X255A, 0X255B, 0X255C, 0X255D, 0X255E, + 0X255F, 0X2560, 0X2561, 0X0401, 0X2562, 0X2563, 0X2564, 0X2565, + 0X2566, 0X2567, 0X2568, 0X2569, 0X256A, 0X256B, 0X256C, 0X00A9, + 0X044E, 0X0430, 0X0431, 0X0446, 0X0434, 0X0435, 0X0444, 0X0433, + 0X0445, 0X0438, 0X0439, 0X043A, 0X043B, 0X043C, 0X043D, 0X043E, + 0X043F, 0X044F, 0X0440, 0X0441, 0X0442, 0X0443, 0X0436, 0X0432, + 0X044C, 0X044B, 0X0437, 0X0448, 0X044D, 0X0449, 0X0447, 0X044A, + 0X042E, 0X0410, 0X0411, 0X0426, 0X0414, 0X0415, 0X0424, 0X0413, + 0X0425, 0X0418, 0X0419, 0X041A, 0X041B, 0X041C, 0X041D, 0X041E, + 0X041F, 0X042F, 0X0420, 0X0421, 0X0422, 0X0423, 0X0416, 0X0412, + 0X042C, 0X042B, 0X0417, 0X0428, 0X042D, 0X0429, 0X0427, 0X042A +}; +DEF_SB_TBL(koi8r, "KOI8-R", "KOI8-R", koi8r_aliases, 0x80, koi8r_ucs_table); + +static const char *koi8u_aliases[] = {"KOI8U", NULL}; +static const unsigned short koi8u_ucs_table[] = { + 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, + 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, + 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E, + 0x255F, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 0x256C, 0x00A9, + 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, + 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, + 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, + 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A +}; +DEF_SB_TBL(koi8u, "KOI8-U", "KOI8-U", koi8u_aliases, 0x80, koi8u_ucs_table); + +static const char *armscii8_aliases[] = {"ArmSCII8", "ARMSCII-8", "ARMSCII8", NULL}; +static const unsigned short armscii8_ucs_table[] = { + 0X00A0, 0X0000, 0X0587, 0X0589, 0X0029, 0X0028, 0X00BB, 0X00AB, + 0X2014, 0X002E, 0X055D, 0X002C, 0X002D, 0X058A, 0X2026, 0X055C, + 0X055B, 0X055E, 0X0531, 0X0561, 0X0532, 0X0562, 0X0533, 0X0563, + 0X0534, 0X0564, 0X0535, 0X0565, 0X0536, 0X0566, 0X0537, 0X0567, + 0X0538, 0X0568, 0X0539, 0X0569, 0X053A, 0X056A, 0X053B, 0X056B, + 0X053C, 0X056C, 0X053D, 0X056D, 0X053E, 0X056E, 0X053F, 0X056F, + 0X0540, 0X0570, 0X0541, 0X0571, 0X0542, 0X0572, 0X0543, 0X0573, + 0X0544, 0X0574, 0X0545, 0X0575, 0X0546, 0X0576, 0X0547, 0X0577, + 0X0548, 0X0578, 0X0549, 0X0579, 0X054A, 0X057A, 0X054B, 0X057B, + 0X054C, 0X057C, 0X054D, 0X057D, 0X054E, 0X057E, 0X054F, 0X057F, + 0X0550, 0X0580, 0X0551, 0X0581, 0X0552, 0X0582, 0X0553, 0X0583, + 0X0554, 0X0584, 0X0555, 0X0585, 0X0556, 0X0586, 0X055A, 0X0000 +}; +static const unsigned char ucs_armscii8_table[] = { + 0XA5, 0XA4, 0X2A, 0X2B, 0XAB, 0XAC, 0XA9, 0X2F +}; +DEF_SB(armscii8, "ArmSCII-8", "ArmSCII-8", armscii8_aliases); + +int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c < 0xA0) { + s = c; + } else { + s = armscii8_ucs_table[c - 0xA0]; + if (!s) { + s = c | MBFL_WCSGROUP_THROUGH; + } + } + + CK((*filter->output_function)(s, filter->data)); + return c; +} + +int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter) +{ + if (c >= 0x28 && c <= 0x2F) { + CK((*filter->output_function)(ucs_armscii8_table[c - 0x28], filter->data)); + } else if (c < 0xA0) { + CK((*filter->output_function)(c, filter->data)); + } else { + for (int n = 0; n < 0x60; n++) { + if (c == armscii8_ucs_table[n]) { + CK((*filter->output_function)(0xA0 + n, filter->data)); + return c; + } + } + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.h b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.h new file mode 100644 index 0000000000..ca7c6f806c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_singlebyte.h @@ -0,0 +1,44 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.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. | + +----------------------------------------------------------------------+ +*/ + +#ifndef MBFL_SINGLEBYTE_H +#define MBFL_SINGLEBYTE_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_ascii; +extern const mbfl_encoding mbfl_encoding_8859_1; +extern const mbfl_encoding mbfl_encoding_8859_2; +extern const mbfl_encoding mbfl_encoding_8859_3; +extern const mbfl_encoding mbfl_encoding_8859_4; +extern const mbfl_encoding mbfl_encoding_8859_5; +extern const mbfl_encoding mbfl_encoding_8859_6; +extern const mbfl_encoding mbfl_encoding_8859_7; +extern const mbfl_encoding mbfl_encoding_8859_8; +extern const mbfl_encoding mbfl_encoding_8859_9; +extern const mbfl_encoding mbfl_encoding_8859_10; +extern const mbfl_encoding mbfl_encoding_8859_13; +extern const mbfl_encoding mbfl_encoding_8859_14; +extern const mbfl_encoding mbfl_encoding_8859_15; +extern const mbfl_encoding mbfl_encoding_8859_16; +extern const mbfl_encoding mbfl_encoding_cp1251; +extern const mbfl_encoding mbfl_encoding_cp1252; +extern const mbfl_encoding mbfl_encoding_cp1254; +extern const mbfl_encoding mbfl_encoding_cp866; +extern const mbfl_encoding mbfl_encoding_cp850; +extern const mbfl_encoding mbfl_encoding_koi8r; +extern const mbfl_encoding mbfl_encoding_koi8u; +extern const mbfl_encoding mbfl_encoding_armscii8; + +#endif /* MBFL_SINGLEBYTE_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c index dc5c2e4882..39e7879c1a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c @@ -36,7 +36,7 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); +static int mbfl_filt_conv_sjis_wchar_flush(mbfl_convert_filter *filter); const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -63,27 +63,21 @@ const mbfl_encoding mbfl_encoding_sjis = { mbfl_no_encoding_sjis, "SJIS", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_aliases, + mbfl_encoding_sjis_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_wchar, &vtbl_wchar_sjis }; -const struct mbfl_identify_vtbl vtbl_identify_sjis = { - mbfl_no_encoding_sjis, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis_wchar = { mbfl_no_encoding_sjis, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_sjis_wchar, - mbfl_filt_conv_common_flush, - NULL, + mbfl_filt_conv_sjis_wchar_flush, + NULL }; const struct mbfl_convert_vtbl vtbl_wchar_sjis = { @@ -93,7 +87,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis = { NULL, mbfl_filt_conv_wchar_sjis, mbfl_filt_conv_common_flush, - NULL, + NULL }; #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) @@ -141,35 +135,32 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis = { } \ } while (0) - -/* - * SJIS => wchar - */ -int -mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) +int mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) { - int c1, s1, s2, w; + int s1, s2, w; switch (filter->status) { case 0: - if (c >= 0 && c < 0x80) { /* latin */ + if (c == 0x5C) { + CK((*filter->output_function)(0xA5, filter->data)); + } else if (c == 0x7E) { + CK((*filter->output_function)(0x203E, filter->data)); + } else if (c >= 0 && c < 0x80) { /* ASCII */ CK((*filter->output_function)(c, filter->data)); - } else if (c > 0xa0 && c < 0xe0) { /* kana */ - CK((*filter->output_function)(0xfec0 + c, filter->data)); - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + } else if (c > 0xA0 && c < 0xE0) { /* Kana */ + CK((*filter->output_function)(0xFEC0 + c, filter->data)); + } else if (c > 0x80 && c < 0xF0 && c != 0xA0) { /* Kanji, first byte */ filter->status = 1; filter->cache = c; } else { - w = c & MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(w, filter->data)); + CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data)); } break; - case 1: /* kanji second char */ + case 1: /* Kanji, second byte */ filter->status = 0; - c1 = filter->cache; - if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + int c1 = filter->cache; + if (c >= 0x40 && c <= 0xFC && c != 0x7F) { SJIS_DECODE(c1, c, s1, s2); w = (s1 - 0x21)*94 + s2 - 0x21; if (w >= 0 && w < jisx0208_ucs_table_size) { @@ -178,45 +169,45 @@ mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) w = 0; } if (w <= 0) { - if (s1 < 0x7f && s2 < 0x7f) { - w = (s1 << 8) | s2; - w &= MBFL_WCSPLANE_MASK; - w |= MBFL_WCSPLANE_JIS0208; + if (s1 < 0x7F && s2 < 0x7F) { + w = (s1 << 8) | s2 | MBFL_WCSPLANE_JIS0208; } else { - w = (c1 << 8) | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | MBFL_WCSGROUP_THROUGH; } } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { - w = (c1 << 8) | c; - w &= MBFL_WCSGROUP_MASK; - w |= MBFL_WCSGROUP_THROUGH; + w = (c1 << 8) | c | MBFL_WCSGROUP_THROUGH; CK((*filter->output_function)(w, filter->data)); } - break; - - default: - filter->status = 0; - break; } return c; } -/* - * wchar => SJIS - */ -int -mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) +static int mbfl_filt_conv_sjis_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + mbfl_filt_conv_illegal_output(filter->cache, filter); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} + +int mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) { int c1, c2, s1, s2; s1 = 0; - if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + if (c == 0x5C) { + /* Unicode 0x5C is a backslash; but Shift-JIS uses 0x5C for the + * Yen sign. JIS X 0208 kuten 0x2140 is a backslash. */ + s1 = 0x2140; + } else if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; @@ -226,42 +217,39 @@ mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; } if (s1 <= 0) { - c1 = c & ~MBFL_WCSPLANE_MASK; - if (c1 == MBFL_WCSPLANE_JIS0208) { - s1 = c & MBFL_WCSPLANE_MASK; - } else if (c == 0xa5) { /* YEN SIGN */ - s1 = 0x216f; /* FULLWIDTH YEN SIGN */ - } else if (c == 0x203e) { /* OVER LINE */ - s1 = 0x2131; /* FULLWIDTH MACRON */ - } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + if (c == 0xA5) { /* YEN SIGN */ + s1 = 0x5C; + } else if (c == 0x203E) { /* OVER LINE */ + s1 = 0x7E; + } else if (c == 0xFF3C) { /* FULLWIDTH REVERSE SOLIDUS */ s1 = 0x2140; - } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + } else if (c == 0xFF5E) { /* FULLWIDTH TILDE */ s1 = 0x2141; - } else if (c == 0x2225) { /* PARALLEL TO */ + } else if (c == 0x2225) { /* PARALLEL TO */ s1 = 0x2142; - } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ - s1 = 0x215d; - } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + } else if (c == 0xFF0D) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215D; + } else if (c == 0xFFE0) { /* FULLWIDTH CENT SIGN */ s1 = 0x2171; - } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + } else if (c == 0xFFE1) { /* FULLWIDTH POUND SIGN */ s1 = 0x2172; - } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ - s1 = 0x224c; - } - if (c == 0) { + } else if (c == 0xFFE2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224C; + } else if (c == 0) { s1 = 0; - } else if (s1 <= 0) { + } else { s1 = -1; } - } else if (s1 >= 0x8080) { + } else if (s1 >= 0x8080) { /* JIS X 0212; not supported */ s1 = -1; } + if (s1 >= 0) { - if (s1 < 0x100) { /* latin or kana */ + if (s1 < 0x100) { /* Latin/Kana */ CK((*filter->output_function)(s1, filter->data)); - } else { /* kanji */ - c1 = (s1 >> 8) & 0xff; - c2 = s1 & 0xff; + } else { /* Kanji */ + c1 = (s1 >> 8) & 0xFF; + c2 = s1 & 0xFF; SJIS_ENCODE(c1, c2, s1, s2); CK((*filter->output_function)(s1, filter->data)); CK((*filter->output_function)(s2, filter->data)); @@ -272,23 +260,3 @@ mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) return c; } - -int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ - ; - } else if (c > 0x80 && c < 0xf0 && c != 0xa0) { /* kanji first char */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h index f271f399c9..b0689fce64 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_sjis; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis; extern const struct mbfl_convert_vtbl vtbl_sjis_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c index 04e1d3af17..02bbdccdc8 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c @@ -35,7 +35,6 @@ extern const unsigned char mblen_table_sjis[]; -extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern int mbfl_bisec_srch(int w, const unsigned short *tbl, int n); extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); @@ -45,26 +44,20 @@ const mbfl_encoding mbfl_encoding_sjis2004 = { mbfl_no_encoding_sjis2004, "SJIS-2004", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis2004_aliases, + mbfl_encoding_sjis2004_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis2004_wchar, &vtbl_wchar_sjis2004 }; -const struct mbfl_identify_vtbl vtbl_identify_sjis2004 = { - mbfl_no_encoding_sjis2004, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis2004_wchar = { mbfl_no_encoding_sjis2004, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_jis2004_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_jis2004_wchar_flush, NULL, }; @@ -74,7 +67,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis2004 = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_jis2004, - mbfl_filt_conv_jis2004_flush, + mbfl_filt_conv_wchar_jis2004_flush, NULL, }; @@ -209,6 +202,9 @@ retry: } else if (filter->from->no_encoding == mbfl_no_encoding_sjis2004) { if (c >= 0x40 && c <= 0xfc && c != 0x7f) { SJIS_DECODE(c1, c, s1, s2); + } else { + CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data)); + break; } } else { s1 = c1; @@ -478,13 +474,21 @@ retry: return c; } +int mbfl_filt_conv_jis2004_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status & 0xF) { + CK((*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + return 0; +} + int mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter) { int k; - int c1, c2, s1 = 0, s2; + int c1, c2, s1, s2; retry: - + s1 = 0; /* check for 1st char of combining characters */ if ((filter->status & 0xf)== 0 && ( c == 0x00E6 || @@ -672,7 +676,7 @@ retry: } int -mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter) +mbfl_filt_conv_wchar_jis2004_flush(mbfl_convert_filter *filter) { int k, c1, c2, s1, s2; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h index c75e3a910b..869fd145c1 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h @@ -33,14 +33,14 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_sjis2004; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis2004; extern const struct mbfl_convert_vtbl vtbl_sjis2004_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis2004; int mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter); int mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter); -int mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_jis2004_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_jis2004_wchar_flush(mbfl_convert_filter *filter); #endif /* MBFL_MBFILTER_SJIS_2004_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c index dc3d3692f4..45b87a8f98 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c @@ -35,10 +35,10 @@ #include "sjis_mac2uni.h" -extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern const unsigned char mblen_table_sjis[]; -static int mbfl_filt_conv_sjis_mac_flush(mbfl_convert_filter *filter); +static int mbfl_filt_conv_wchar_sjis_mac_flush(mbfl_convert_filter *filter); +static int mbfl_filt_conv_sjis_mac_wchar_flush(mbfl_convert_filter *filter); static const char *mbfl_encoding_sjis_mac_aliases[] = {"MacJapanese", "x-Mac-Japanese", NULL}; @@ -46,26 +46,20 @@ const mbfl_encoding mbfl_encoding_sjis_mac = { mbfl_no_encoding_sjis_mac, "SJIS-mac", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_mac_aliases, + mbfl_encoding_sjis_mac_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_mac_wchar, &vtbl_wchar_sjis_mac }; -const struct mbfl_identify_vtbl vtbl_identify_sjis_mac = { - mbfl_no_encoding_sjis_mac, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar = { mbfl_no_encoding_sjis_mac, mbfl_no_encoding_wchar, mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_sjis_mac_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_sjis_mac_wchar_flush, NULL, }; @@ -75,7 +69,7 @@ const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_wchar_sjis_mac, - mbfl_filt_conv_sjis_mac_flush, + mbfl_filt_conv_wchar_sjis_mac_flush, NULL, }; @@ -139,7 +133,7 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) CK((*filter->output_function)(c, filter->data)); } else if (c > 0xa0 && c < 0xe0) { /* kana */ CK((*filter->output_function)(0xfec0 + c, filter->data)); - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + } else if (c > 0x80 && c <= 0xed && c != 0xa0) { /* kanji first char */ filter->status = 1; filter->cache = c; } else if (c == 0x5c) { @@ -223,6 +217,10 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) for (i=0; i<8; i++) { if (s >= code_ofst_tbl[i][0] && s <= code_ofst_tbl[i][1]) { w = code_map[i][s - code_ofst_tbl[i][0]]; + if (w == 0) { + CK((*filter->output_function)((c1 << 8) | c | MBFL_WCSGROUP_THROUGH, filter->data)); + return c; + } s2 = 0; if (s >= 0x043e && s <= 0x0441) { s2 = 0xf87a; @@ -254,8 +252,6 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) w |= MBFL_WCSPLANE_WINCP932; } CK((*filter->output_function)(w, filter->data)); - } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ - CK((*filter->output_function)(c, filter->data)); } else { w = (c1 << 8) | c; w &= MBFL_WCSGROUP_MASK; @@ -272,6 +268,15 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) return c; } +static int mbfl_filt_conv_sjis_mac_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status == 1) { + int w = (filter->cache & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + return 0; +} + /* * wchar => SJIS-mac */ @@ -367,6 +372,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) if (s2 <= 0 || s1 == -1) { break; } + s1 = s2 = 0; case 0: @@ -402,6 +408,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) } if (c == 0xf860 || c == 0xf861 || c == 0xf862) { + /* Apple 'transcoding hint' codepoints (from private use area) */ filter->status = 2; filter->cache = c; return c; @@ -420,8 +427,10 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) s1 |= 0x8080; } else if (c == 0xa0) { s1 = 0x00a0; - } else if (c == 0xa5) { /* YEN SIGN */ - s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0xa5) { /* YEN SIGN */ + /* Unicode has codepoint 0xFFE5 for a fullwidth Yen sign; + * convert codepoint 0xA5 to halfwidth Yen sign */ + s1 = 0x5c; /* HALFWIDTH YEN SIGN */ } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ s1 = 0x2140; } @@ -519,8 +528,9 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) } if (filter->status == 0) { + /* Didn't find any of expected codepoints after Apple transcoding hint */ CK(mbfl_filt_conv_illegal_output(c1, filter)); - CK(mbfl_filt_conv_illegal_output(c, filter)); + return mbfl_filt_conv_wchar_sjis_mac(c, filter); } break; @@ -667,7 +677,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) } static int -mbfl_filt_conv_sjis_mac_flush(mbfl_convert_filter *filter) +mbfl_filt_conv_wchar_sjis_mac_flush(mbfl_convert_filter *filter) { int i, c1, s1 = 0; if (filter->status == 1 && filter->cache > 0) { diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h index f4b2adfeac..970d14a4c9 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h @@ -33,8 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_sjis_mac; - -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_mac; extern const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c index 68084a0e0a..255a457c58 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c @@ -36,7 +36,6 @@ #include "emoji2uni.h" extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); -extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); extern const unsigned char mblen_table_sjis[]; static const char *mbfl_encoding_sjis_docomo_aliases[] = {"SJIS-DOCOMO", "shift_jis-imode", "x-sjis-emoji-docomo", NULL}; @@ -47,7 +46,7 @@ const mbfl_encoding mbfl_encoding_sjis_docomo = { mbfl_no_encoding_sjis_docomo, "SJIS-Mobile#DOCOMO", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_docomo_aliases, + mbfl_encoding_sjis_docomo_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_docomo_wchar, @@ -58,7 +57,7 @@ const mbfl_encoding mbfl_encoding_sjis_kddi = { mbfl_no_encoding_sjis_kddi, "SJIS-Mobile#KDDI", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_kddi_aliases, + mbfl_encoding_sjis_kddi_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_kddi_wchar, @@ -69,31 +68,13 @@ const mbfl_encoding mbfl_encoding_sjis_sb = { mbfl_no_encoding_sjis_sb, "SJIS-Mobile#SOFTBANK", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_sb_aliases, + mbfl_encoding_sjis_sb_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_sb_wchar, &vtbl_wchar_sjis_sb }; -const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo = { - mbfl_no_encoding_sjis_docomo, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - -const struct mbfl_identify_vtbl vtbl_identify_sjis_kddi = { - mbfl_no_encoding_sjis_kddi, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - -const struct mbfl_identify_vtbl vtbl_identify_sjis_sb = { - mbfl_no_encoding_sjis_sb, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis -}; - const struct mbfl_convert_vtbl vtbl_sjis_docomo_wchar = { mbfl_no_encoding_sjis_docomo, mbfl_no_encoding_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h index 51b703da72..19e1920c6e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h @@ -36,10 +36,6 @@ extern const mbfl_encoding mbfl_encoding_sjis_docomo; extern const mbfl_encoding mbfl_encoding_sjis_kddi; extern const mbfl_encoding mbfl_encoding_sjis_sb; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_kddi; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_sb; - extern const struct mbfl_convert_vtbl vtbl_sjis_docomo_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_docomo; extern const struct mbfl_convert_vtbl vtbl_sjis_kddi_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c index 2535036e23..d37f01568e 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c @@ -33,8 +33,6 @@ #include "unicode_table_cp932_ext.h" #include "unicode_table_jis.h" -static int mbfl_filt_ident_sjis_open(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -60,19 +58,13 @@ const mbfl_encoding mbfl_encoding_sjis_open = { mbfl_no_encoding_sjis_open, "SJIS-win", "Shift_JIS", - (const char *(*)[])&mbfl_encoding_sjis_open_aliases, + mbfl_encoding_sjis_open_aliases, mblen_table_sjis, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_sjis_open_wchar, &vtbl_wchar_sjis_open }; -const struct mbfl_identify_vtbl vtbl_identify_sjis_open = { - mbfl_no_encoding_sjis_open, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_sjis_open -}; - const struct mbfl_convert_vtbl vtbl_sjis_open_wchar = { mbfl_no_encoding_sjis_open, mbfl_no_encoding_wchar, @@ -323,23 +315,3 @@ mbfl_filt_conv_wchar_sjis_open(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_sjis_open(int c, mbfl_identify_filter *filter) -{ - if (filter->status) { /* kanji second char */ - if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - } else if (c >= 0 && c < 0x80) { /* latin ok */ - ; - } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ - ; - } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ - filter->status = 1; - } else { /* bad */ - filter->flag = 1; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h index 2c6c70373a..764fad7e17 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h @@ -34,7 +34,6 @@ extern const mbfl_encoding mbfl_encoding_sjis_open; -extern const struct mbfl_identify_vtbl vtbl_identify_sjis_open; extern const struct mbfl_convert_vtbl vtbl_sjis_open_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_open; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c index 68172efbe6..c886654f61 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c @@ -30,13 +30,22 @@ #include "mbfilter.h" #include "mbfilter_ucs2.h" +static int mbfl_filt_conv_ucs2_wchar_flush(mbfl_convert_filter *filter); + static const char *mbfl_encoding_ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL}; +/* This library historically had encodings called 'byte2be' and 'byte2le' + * which were almost identical to UCS-2, except that they would truncate + * Unicode codepoints higher than 0xFFFF quietly + * Maintain minimal support by aliasing to UCS-2 */ +static const char *mbfl_encoding_ucs2be_aliases[] = {"byte2be", NULL}; +static const char *mbfl_encoding_ucs2le_aliases[] = {"byte2le", NULL}; + const mbfl_encoding mbfl_encoding_ucs2 = { mbfl_no_encoding_ucs2, "UCS-2", "UCS-2", - (const char *(*)[])&mbfl_encoding_ucs2_aliases, + mbfl_encoding_ucs2_aliases, NULL, MBFL_ENCTYPE_WCS2BE, &vtbl_ucs2_wchar, @@ -47,7 +56,7 @@ const mbfl_encoding mbfl_encoding_ucs2be = { mbfl_no_encoding_ucs2be, "UCS-2BE", "UCS-2BE", - NULL, + mbfl_encoding_ucs2be_aliases, NULL, MBFL_ENCTYPE_WCS2BE, &vtbl_ucs2be_wchar, @@ -58,7 +67,7 @@ const mbfl_encoding mbfl_encoding_ucs2le = { mbfl_no_encoding_ucs2le, "UCS-2LE", "UCS-2LE", - NULL, + mbfl_encoding_ucs2le_aliases, NULL, MBFL_ENCTYPE_WCS2LE, &vtbl_ucs2le_wchar, @@ -71,7 +80,7 @@ const struct mbfl_convert_vtbl vtbl_ucs2_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_ucs2_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_ucs2_wchar_flush, NULL, }; @@ -91,7 +100,7 @@ const struct mbfl_convert_vtbl vtbl_ucs2be_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_ucs2be_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_ucs2_wchar_flush, NULL, }; @@ -111,7 +120,7 @@ const struct mbfl_convert_vtbl vtbl_ucs2le_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_ucs2le_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_ucs2_wchar_flush, NULL, }; @@ -127,113 +136,83 @@ const struct mbfl_convert_vtbl vtbl_wchar_ucs2le = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) -/* - * UCS-2 => wchar - */ int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter) { - int n, endian; - - endian = filter->status & 0xff00; - switch (filter->status & 0xff) { - case 0: - if (endian) { - n = c & 0xff; - } else { - n = (c & 0xff) << 8; - } - filter->cache = n; - filter->status++; - break; - default: - if (endian) { - n = (c & 0xff) << 8; + if (filter->status == 0) { + filter->status = 1; + filter->cache = c & 0xFF; + } else { + filter->status = 0; + int n = (filter->cache << 8) | (c & 0xFF); + if (n == 0xFFFE) { + /* Found little-endian byte order mark */ + filter->filter_function = mbfl_filt_conv_ucs2le_wchar; } else { - n = c & 0xff; - } - n |= filter->cache; - if (n == 0xfffe) { - if (endian) { - filter->status = 0; /* big-endian */ - } else { - filter->status = 0x100; /* little-endian */ + filter->filter_function = mbfl_filt_conv_ucs2be_wchar; + if (n != 0xFEFF) { + CK((*filter->output_function)(n, filter->data)); } - CK((*filter->output_function)(0xfeff, filter->data)); - } else { - filter->status &= ~0xff; - CK((*filter->output_function)(n, filter->data)); } - break; } - return c; } -/* - * UCS-2BE => wchar - */ int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter) { - int n; - if (filter->status == 0) { filter->status = 1; - n = (c & 0xff) << 8; - filter->cache = n; + filter->cache = (c & 0xFF) << 8; } else { filter->status = 0; - n = (c & 0xff) | filter->cache; - CK((*filter->output_function)(n, filter->data)); + CK((*filter->output_function)((c & 0xFF) | filter->cache, filter->data)); } return c; } -/* - * wchar => UCS-2BE - */ int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); - CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xFF, filter->data)); + CK((*filter->output_function)(c & 0xFF, filter->data)); } else { CK(mbfl_filt_conv_illegal_output(c, filter)); } - return c; } -/* - * UCS-2LE => wchar - */ int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter) { - int n; - if (filter->status == 0) { filter->status = 1; - n = c & 0xff; - filter->cache = n; + filter->cache = c & 0xFF; } else { filter->status = 0; - n = ((c & 0xff) << 8) | filter->cache; - CK((*filter->output_function)(n, filter->data)); + CK((*filter->output_function)(((c & 0xFF) << 8) | filter->cache, filter->data)); } return c; } - -/* - * wchar => UCS-2LE - */ int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { - CK((*filter->output_function)(c & 0xff, filter->data)); - CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xFF, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xFF, filter->data)); } else { CK(mbfl_filt_conv_illegal_output(c, filter)); } - return c; } + +static int mbfl_filt_conv_ucs2_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + /* Input string was truncated */ + CK((*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c index fcdd20d615..96ef6fbf6d 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c @@ -32,11 +32,17 @@ static const char *mbfl_encoding_ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL}; +/* This library historically had encodings called 'byte4be' and 'byte4le' + * which were almost identical to UCS-4 + * Maintain minimal support by aliasing to UCS-2 */ +static const char *mbfl_encoding_ucs4be_aliases[] = {"byte4be", NULL}; +static const char *mbfl_encoding_ucs4le_aliases[] = {"byte4le", NULL}; + const mbfl_encoding mbfl_encoding_ucs4 = { mbfl_no_encoding_ucs4, "UCS-4", "UCS-4", - (const char *(*)[])&mbfl_encoding_ucs4_aliases, + mbfl_encoding_ucs4_aliases, NULL, MBFL_ENCTYPE_WCS4BE, &vtbl_ucs4_wchar, @@ -47,7 +53,7 @@ const mbfl_encoding mbfl_encoding_ucs4be = { mbfl_no_encoding_ucs4be, "UCS-4BE", "UCS-4BE", - NULL, + mbfl_encoding_ucs4be_aliases, NULL, MBFL_ENCTYPE_WCS4BE, &vtbl_ucs4be_wchar, @@ -58,7 +64,7 @@ const mbfl_encoding mbfl_encoding_ucs4le = { mbfl_no_encoding_ucs4le, "UCS-4LE", "UCS-4LE", - NULL, + mbfl_encoding_ucs4le_aliases, NULL, MBFL_ENCTYPE_WCS4LE, &vtbl_ucs4le_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c index 5dc4aa81a9..a164fccbcd 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c @@ -32,8 +32,6 @@ #define UNICODE_TABLE_UHC_DEF #include "unicode_table_uhc.h" -static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter); - static const unsigned char mblen_table_uhc[] = { /* 0x81-0xFE */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -59,19 +57,13 @@ const mbfl_encoding mbfl_encoding_uhc = { mbfl_no_encoding_uhc, "UHC", "UHC", - (const char *(*)[])&mbfl_encoding_uhc_aliases, + mbfl_encoding_uhc_aliases, mblen_table_uhc, MBFL_ENCTYPE_MBCS, &vtbl_uhc_wchar, &vtbl_wchar_uhc }; -const struct mbfl_identify_vtbl vtbl_identify_uhc = { - mbfl_no_encoding_uhc, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_uhc -}; - const struct mbfl_convert_vtbl vtbl_uhc_wchar = { mbfl_no_encoding_uhc, mbfl_no_encoding_wchar, @@ -220,43 +212,3 @@ mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter) return c; } - -static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter) -{ - switch (filter->status) { - case 0: /* latin */ - if (c >= 0 && c < 0x80) { /* ok */ - ; - } else if (c >= 0x81 && c <= 0xa0) { /* dbcs first char */ - filter->status= 1; - } else if (c >= 0xa1 && c <= 0xc6) { /* dbcs first char */ - filter->status= 2; - } else if (c >= 0xc7 && c <= 0xfe) { /* dbcs first char */ - filter->status= 3; - } else { /* bad */ - filter->flag = 1; - } - - case 1: - case 2: - if (c < 0x41 || (c > 0x5a && c < 0x61) - || (c > 0x7a && c < 0x81) || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - case 3: - if (c < 0xa1 || c > 0xfe) { /* bad */ - filter->flag = 1; - } - filter->status = 0; - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h index 6ed5486767..860d45eb86 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_uhc; -extern const struct mbfl_identify_vtbl vtbl_identify_uhc; extern const struct mbfl_convert_vtbl vtbl_uhc_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_uhc; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c index 620e8a76f7..10063883f2 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c @@ -30,13 +30,15 @@ #include "mbfilter.h" #include "mbfilter_utf16.h" +static int mbfl_filt_conv_utf16_wchar_flush(mbfl_convert_filter *filter); + static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL}; const mbfl_encoding mbfl_encoding_utf16 = { mbfl_no_encoding_utf16, "UTF-16", "UTF-16", - (const char *(*)[])&mbfl_encoding_utf16_aliases, + mbfl_encoding_utf16_aliases, NULL, MBFL_ENCTYPE_MWC2BE, &vtbl_utf16_wchar, @@ -71,7 +73,7 @@ const struct mbfl_convert_vtbl vtbl_utf16_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf16_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf16_wchar_flush, NULL, }; @@ -91,7 +93,7 @@ const struct mbfl_convert_vtbl vtbl_utf16be_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf16be_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf16_wchar_flush, NULL, }; @@ -111,7 +113,7 @@ const struct mbfl_convert_vtbl vtbl_utf16le_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf16le_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf16_wchar_flush, NULL, }; @@ -127,111 +129,89 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf16le = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) -/* - * UTF-16 => wchar - */ int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter) { - int n, endian; - - endian = filter->status & 0xff00; - switch (filter->status & 0x0f) { - case 0: - if (endian) { - n = c & 0xff; - } else { - n = (c & 0xff) << 8; - } - filter->cache |= n; - filter->status++; - break; - default: - if (endian) { - n = (c & 0xff) << 8; + /* Start with the assumption that the string is big-endian; + * If we find a little-endian BOM, then we will change that assumption */ + if (filter->status == 0) { + filter->cache = c & 0xFF; + filter->status = 1; + } else { + int n = (filter->cache << 8) | (c & 0xFF); + if (n == 0xFFFE) { + /* Switch to little-endian mode */ + filter->filter_function = mbfl_filt_conv_utf16le_wchar; + filter->cache = filter->status = 0; } else { - n = c & 0xff; - } - n |= filter->cache & 0xffff; - filter->status &= ~0x0f; - if (n >= 0xd800 && n < 0xdc00) { - filter->cache = ((n & 0x3ff) << 16) + 0x400000; - } else if (n >= 0xdc00 && n < 0xe000) { - n &= 0x3ff; - n |= (filter->cache & 0xfff0000) >> 6; - filter->cache = 0; - if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { - CK((*filter->output_function)(n, filter->data)); - } else { /* illegal character */ - n &= MBFL_WCSGROUP_MASK; - n |= MBFL_WCSGROUP_THROUGH; + filter->filter_function = mbfl_filt_conv_utf16be_wchar; + if (n >= 0xD800 && n <= 0xDBFF) { + filter->cache = n & 0x3FF; /* Pick out 10 data bits */ + filter->status = 2; + return c; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + /* This is wrong; second part of surrogate pair has come first */ + CK((*filter->output_function)(n | MBFL_WCSGROUP_THROUGH, filter->data)); + } else if (n != 0xFEFF) { CK((*filter->output_function)(n, filter->data)); } - } else { - int is_first = filter->status & 0x10; - filter->cache = 0; - filter->status |= 0x10; - if (!is_first) { - if (n == 0xfffe) { - if (endian) { - filter->status &= ~0x100; /* big-endian */ - } else { - filter->status |= 0x100; /* little-endian */ - } - break; - } else if (n == 0xfeff) { - break; - } - } - CK((*filter->output_function)(n, filter->data)); + filter->cache = filter->status = 0; } - break; } return c; } -/* - * UTF-16BE => wchar - */ int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter) { int n; switch (filter->status) { - case 0: + case 0: /* First byte */ + filter->cache = c & 0xFF; filter->status = 1; - n = (c & 0xff) << 8; - filter->cache |= n; break; - default: - filter->status = 0; - n = (filter->cache & 0xff00) | (c & 0xff); - if (n >= 0xd800 && n < 0xdc00) { - filter->cache = ((n & 0x3ff) << 16) + 0x400000; - } else if (n >= 0xdc00 && n < 0xe000) { - n &= 0x3ff; - n |= (filter->cache & 0xfff0000) >> 6; - filter->cache = 0; - if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { - CK((*filter->output_function)(n, filter->data)); - } else { /* illegal character */ - n &= MBFL_WCSGROUP_MASK; - n |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + + case 1: /* Second byte */ + n = (filter->cache << 8) | (c & 0xFF); + if (n >= 0xD800 && n <= 0xDBFF) { + filter->cache = n & 0x3FF; /* Pick out 10 data bits */ + filter->status = 2; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + /* This is wrong; second part of surrogate pair has come first */ + CK((*filter->output_function)(n | MBFL_WCSGROUP_THROUGH, filter->data)); + filter->status = 0; } else { - filter->cache = 0; CK((*filter->output_function)(n, filter->data)); + filter->status = 0; } break; + + case 2: /* Second part of surrogate, first byte */ + filter->cache = (filter->cache << 8) | (c & 0xFF); + filter->status = 3; + break; + + case 3: /* Second part of surrogate, second byte */ + n = ((filter->cache & 0xFF) << 8) | (c & 0xFF); + if (n >= 0xD800 && n <= 0xDBFF) { + /* Wrong; that's the first half of a surrogate pair, not the second */ + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 8) | MBFL_WCSGROUP_THROUGH, filter->data)); + filter->cache = n & 0x3FF; + filter->status = 2; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + n = ((filter->cache & 0x3FF00) << 2) + (n & 0x3FF) + 0x10000; + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + } else { + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 8) | MBFL_WCSGROUP_THROUGH, filter->data)); + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + } } return c; } -/* - * wchar => UTF-16BE - */ int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter) { int n; @@ -253,38 +233,53 @@ int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter) return c; } -/* - * UTF-16LE => wchar - */ int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter) { int n; switch (filter->status) { case 0: + filter->cache = c & 0xff; filter->status = 1; - n = c & 0xff; - filter->cache |= n; break; - default: - filter->status = 0; - n = (filter->cache & 0xff) | ((c & 0xff) << 8); - if (n >= 0xd800 && n < 0xdc00) { - filter->cache = ((n & 0x3ff) << 16) + 0x400000; - } else if (n >= 0xdc00 && n < 0xe000) { - n &= 0x3ff; - n |= (filter->cache & 0xfff0000) >> 6; - filter->cache = 0; - if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { - CK((*filter->output_function)(n, filter->data)); - } else { /* illegal character */ - n &= MBFL_WCSGROUP_MASK; - n |= MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + + case 1: + if ((c & 0xfc) == 0xd8) { + /* Looks like we have a surrogate pair here */ + filter->cache += ((c & 0x3) << 8); + filter->status = 2; + } else if ((c & 0xfc) == 0xdc) { + /* This is wrong; the second part of the surrogate pair has come first + * Flag it with `MBFL_WCSGROUP_THROUGH`; the following filter will handle + * the error */ + n = (filter->cache + ((c & 0xff) << 8)) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; } else { - filter->cache = 0; + CK((*filter->output_function)(filter->cache + ((c & 0xff) << 8), filter->data)); + filter->status = 0; + } + break; + + case 2: + filter->cache = (filter->cache << 10) + (c & 0xff); + filter->status = 3; + break; + + case 3: + n = (filter->cache & 0xFF) | ((c & 0xFF) << 8); + if (n >= 0xD800 && n <= 0xDBFF) { + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 10) | MBFL_WCSGROUP_THROUGH, filter->data)); + filter->cache = n & 0x3FF; + filter->status = 2; + } else if (n >= 0xDC00 && n <= 0xDFFF) { + n = filter->cache + ((c & 0x3) << 8) + 0x10000; + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + } else { + CK((*filter->output_function)((0xD8 << 10) | (filter->cache >> 10) | MBFL_WCSGROUP_THROUGH, filter->data)); CK((*filter->output_function)(n, filter->data)); + filter->status = 0; } break; } @@ -292,9 +287,6 @@ int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter) return c; } -/* - * wchar => UTF-16LE - */ int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter) { int n; @@ -315,3 +307,21 @@ int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter) return c; } + +static int mbfl_filt_conv_utf16_wchar_flush(mbfl_convert_filter *filter) +{ + int status = filter->status; + int cache = filter->cache; + filter->status = filter->cache = 0; + + if (status) { + /* Input string was truncated */ + CK((*filter->output_function)(cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h index 4aa88619c7..727c231b34 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h @@ -33,6 +33,7 @@ extern const mbfl_encoding mbfl_encoding_utf16; extern const mbfl_encoding mbfl_encoding_utf16be; extern const mbfl_encoding mbfl_encoding_utf16le; + extern const struct mbfl_convert_vtbl vtbl_utf16_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf16; extern const struct mbfl_convert_vtbl vtbl_utf16be_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c index b936ab4102..a9a7903b5d 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c @@ -30,13 +30,15 @@ #include "mbfilter.h" #include "mbfilter_utf32.h" +static int mbfl_filt_conv_utf32_wchar_flush(mbfl_convert_filter *filter); + static const char *mbfl_encoding_utf32_aliases[] = {"utf32", NULL}; const mbfl_encoding mbfl_encoding_utf32 = { mbfl_no_encoding_utf32, "UTF-32", "UTF-32", - (const char *(*)[])&mbfl_encoding_utf32_aliases, + mbfl_encoding_utf32_aliases, NULL, MBFL_ENCTYPE_WCS4BE, &vtbl_utf32_wchar, @@ -71,7 +73,7 @@ const struct mbfl_convert_vtbl vtbl_utf32_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf32_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf32_wchar_flush, NULL, }; @@ -91,7 +93,7 @@ const struct mbfl_convert_vtbl vtbl_utf32be_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf32be_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf32_wchar_flush, NULL, }; @@ -111,7 +113,7 @@ const struct mbfl_convert_vtbl vtbl_utf32le_wchar = { mbfl_filt_conv_common_ctor, NULL, mbfl_filt_conv_utf32le_wchar, - mbfl_filt_conv_common_flush, + mbfl_filt_conv_utf32_wchar_flush, NULL, }; @@ -127,106 +129,53 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf32le = { #define CK(statement) do { if ((statement) < 0) return (-1); } while (0) -/* - * UTF-32 => wchar - */ -int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter) +static int emit_char_if_valid(int n, mbfl_convert_filter *filter) { - int n, endian; + if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xD800 || n > 0xDFFF)) { + CK((*filter->output_function)(n, filter->data)); + } else { + n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + return 0; +} - endian = filter->status & 0xff00; - switch (filter->status & 0xff) { - case 0: - if (endian) { - n = c & 0xff; - } else { - n = (c & 0xffu) << 24; - } - filter->cache = n; - filter->status++; - break; - case 1: - if (endian) { - n = (c & 0xff) << 8; - } else { - n = (c & 0xff) << 16; - } - filter->cache |= n; - filter->status++; - break; - case 2: - if (endian) { - n = (c & 0xff) << 16; - } else { - n = (c & 0xff) << 8; - } - filter->cache |= n; +int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter) +{ + if (filter->status < 3) { + filter->cache = (filter->cache << 8) | (c & 0xFF); filter->status++; - break; - default: - if (endian) { - n = (c & 0xffu) << 24; - } else { - n = c & 0xff; - } - n |= filter->cache; - if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) { - if (endian) { - filter->status = 0; /* big-endian */ - } else { - filter->status = 0x100; /* little-endian */ - } - CK((*filter->output_function)(0xfeff, filter->data)); + } else { + int n = ((unsigned int)filter->cache << 8) | (c & 0xFF); + filter->cache = filter->status = 0; + + if (n == 0xFFFE0000) { + /* Found a little-endian byte order mark */ + filter->filter_function = mbfl_filt_conv_utf32le_wchar; } else { - filter->status &= ~0xff; - if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { - CK((*filter->output_function)(n, filter->data)); - } else { - n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); + filter->filter_function = mbfl_filt_conv_utf32be_wchar; + if (n != 0xFEFF) { + CK(emit_char_if_valid(n, filter)); } } - break; } return c; } -/* - * UTF-32BE => wchar - */ int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter) { - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xffu) << 24; - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 16; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 8; - filter->cache |= n; + if (filter->status < 3) { + filter->cache = (filter->cache << 8) | (c & 0xFF); + filter->status++; } else { - filter->status = 0; - n = (c & 0xff) | filter->cache; - if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { - CK((*filter->output_function)(n, filter->data)); - } else { - n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + int n = ((unsigned int)filter->cache << 8) | (c & 0xFF); + filter->cache = filter->status = 0; + CK(emit_char_if_valid(n, filter)); } return c; } -/* - * wchar => UTF-32BE - */ int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UTF32MAX) { @@ -241,41 +190,19 @@ int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter) return c; } -/* - * UTF-32LE => wchar - */ int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter) { - int n; - - if (filter->status == 0) { - filter->status = 1; - n = (c & 0xff); - filter->cache = n; - } else if (filter->status == 1) { - filter->status = 2; - n = (c & 0xff) << 8; - filter->cache |= n; - } else if (filter->status == 2) { - filter->status = 3; - n = (c & 0xff) << 16; - filter->cache |= n; + if (filter->status < 3) { + filter->cache |= ((c & 0xFFU) << (8 * filter->status)); + filter->status++; } else { - filter->status = 0; - n = ((c & 0xffu) << 24) | filter->cache; - if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { - CK((*filter->output_function)(n, filter->data)); - } else { - n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; - CK((*filter->output_function)(n, filter->data)); - } + int n = ((c & 0xFFU) << 24) | filter->cache; + filter->cache = filter->status = 0; + CK(emit_char_if_valid(n, filter)); } return c; } -/* - * wchar => UTF-32LE - */ int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter) { if (c >= 0 && c < MBFL_WCSPLANE_UTF32MAX) { @@ -289,3 +216,17 @@ int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter) return c; } + +static int mbfl_filt_conv_utf32_wchar_flush(mbfl_convert_filter *filter) +{ + if (filter->status) { + /* Input string was truncated */ + CK((*filter->output_function)(filter->cache | MBFL_WCSGROUP_THROUGH, filter->data)); + } + + if (filter->flush_function) { + (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h index 14b9fa4823..58c69d72f1 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h @@ -33,6 +33,7 @@ extern const mbfl_encoding mbfl_encoding_utf32; extern const mbfl_encoding mbfl_encoding_utf32be; extern const mbfl_encoding mbfl_encoding_utf32le; + extern const struct mbfl_convert_vtbl vtbl_utf32_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf32; extern const struct mbfl_convert_vtbl vtbl_utf32be_wchar; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c index b54bcf2b9c..bda303ef6f 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c @@ -30,8 +30,6 @@ #include "mbfilter.h" #include "mbfilter_utf7.h" -static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter); - static const unsigned char mbfl_base64_table[] = { /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */ 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d, @@ -51,19 +49,13 @@ const mbfl_encoding mbfl_encoding_utf7 = { mbfl_no_encoding_utf7, "UTF-7", "UTF-7", - (const char *(*)[])&mbfl_encoding_utf7_aliases, + mbfl_encoding_utf7_aliases, NULL, MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE, &vtbl_utf7_wchar, &vtbl_wchar_utf7 }; -const struct mbfl_identify_vtbl vtbl_identify_utf7 = { - mbfl_no_encoding_utf7, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf7 -}; - const struct mbfl_convert_vtbl vtbl_utf7_wchar = { mbfl_no_encoding_utf7, mbfl_no_encoding_wchar, @@ -409,52 +401,3 @@ int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter) return 0; } - -static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter) -{ - int n; - - switch (filter->status) { - /* directly encoded characters */ - case 0: - if (c == 0x2b) { /* '+' shift character */ - filter->status++; - } else if (c == 0x5c || c == 0x7e || c < 0 || c > 0x7f) { /* illegal character */ - filter->flag = 1; /* bad */ - } - break; - - /* Modified Base64 */ - case 1: - case 2: - n = 0; - if (c >= 0x41 && c <= 0x5a) { /* A - Z */ - n = 1; - } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ - n = 1; - } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ - n = 1; - } else if (c == 0x2b) { /* '+' */ - n = 1; - } else if (c == 0x2f) { /* '/' */ - n = 1; - } - if (n <= 0) { - if (filter->status == 1 && c != 0x2d) { - filter->flag = 1; /* bad */ - } else if (c < 0 || c > 0x7f) { - filter->flag = 1; /* bad */ - } - filter->status = 0; - } else { - filter->status = 2; - } - break; - - default: - filter->status = 0; - break; - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h index 6223bdba97..119937eb41 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h @@ -33,7 +33,6 @@ #include "mbfilter.h" extern const mbfl_encoding mbfl_encoding_utf7; -extern const struct mbfl_identify_vtbl vtbl_identify_utf7; extern const struct mbfl_convert_vtbl vtbl_utf7_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf7; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c index c8fe70fc7f..4c1cd8712f 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c @@ -27,14 +27,64 @@ * */ +/* Modified UTF-7 used for 'international mailbox names' in the IMAP protocol + * Also known as mUTF-7 + * Defined in RFC 3501 5.1.3 (https://tools.ietf.org/html/rfc3501) + * + * Quoting from the RFC: + * + *********************************************************************** + * In modified UTF-7, printable US-ASCII characters, except for "&", + * represent themselves; that is, characters with octet values 0x20-0x25 + * and 0x27-0x7e. The character "&" (0x26) is represented by the + * two-octet sequence "&-". + * + * All other characters (octet values 0x00-0x1f and 0x7f-0xff) are + * represented in modified BASE64, with a further modification from + * UTF-7 that "," is used instead of "/". Modified BASE64 MUST NOT be + * used to represent any printing US-ASCII character which can represent + * itself. + * + * "&" is used to shift to modified BASE64 and "-" to shift back to + * US-ASCII. There is no implicit shift from BASE64 to US-ASCII, and + * null shifts ("-&" while in BASE64; note that "&-" while in US-ASCII + * means "&") are not permitted. However, all names start in US-ASCII, + * and MUST end in US-ASCII; that is, a name that ends with a non-ASCII + * ISO-10646 character MUST end with a "-"). + *********************************************************************** + * + * The purpose of all this is: 1) to keep all parts of IMAP messages 7-bit clean, + * 2) to avoid giving special treatment to +, /, \, and ~, since these are + * commonly used in mailbox names, and 3) to ensure there is only one + * representation of any mailbox name (vanilla UTF-7 does allow multiple + * representations of the same string, by Base64-encoding characters which + * could have been included as ASCII literals.) + * + * RFC 2152 also applies, since it defines vanilla UTF-7 (minus IMAP modifications) + * The following paragraph is notable: + * + *********************************************************************** + * Unicode is encoded using Modified Base64 by first converting Unicode + * 16-bit quantities to an octet stream (with the most significant octet first). + * Surrogate pairs (UTF-16) are converted by treating each half of the pair as + * a separate 16 bit quantity (i.e., no special treatment). Text with an odd + * number of octets is ill-formed. ISO 10646 characters outside the range + * addressable via surrogate pairs cannot be encoded. + *********************************************************************** + * + * So after reversing the modified Base64 encoding on an encoded section, + * the contents are interpreted as UTF-16BE. */ + #include "mbfilter.h" #include "mbfilter_utf7imap.h" +static const char *mbfl_encoding_utf7imap_aliases[] = {"mUTF-7", NULL}; + const mbfl_encoding mbfl_encoding_utf7imap = { mbfl_no_encoding_utf7imap, "UTF7-IMAP", NULL, - NULL, + mbfl_encoding_utf7imap_aliases, NULL, MBFL_ENCTYPE_MBCS, &vtbl_utf7imap_wchar, @@ -106,7 +156,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) case 0: if (c == 0x26) { /* '&' shift character */ filter->status++; - } else if (c >= 0 && c < 0x80) { /* ASCII */ + } else if (c >= 0x20 && c <= 0x7E) { /* ASCII */ CK((*filter->output_function)(c, filter->data)); } else { /* illegal character */ s = c & MBFL_WCSGROUP_MASK; @@ -145,7 +195,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } } else { filter->cache = n; - CK((*filter->output_function)(s, filter->data)); + /* Characters which can be expressed as literal, ASCII characters + * should not be Base64-encoded */ + if (s < 0x20 || s > 0x7E || s == '&') { + CK((*filter->output_function)(s, filter->data)); + } else { + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } } break; @@ -177,7 +235,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } } else { filter->cache = n; - CK((*filter->output_function)(s, filter->data)); + /* Characters which can be expressed as literal, ASCII characters + * should not be Base64-encoded */ + if (s < 0x20 || s > 0x7E || s == '&') { + CK((*filter->output_function)(s, filter->data)); + } else { + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } } break; @@ -204,7 +270,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } } else { filter->cache = 0; - CK((*filter->output_function)(s, filter->data)); + /* Characters which can be expressed as literal, ASCII characters + * should not be Base64-encoded */ + if (s < 0x20 || s > 0x7E || s == '&') { + CK((*filter->output_function)(s, filter->data)); + } else { + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } } break; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c index 9e97d5b069..0c73952558 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c @@ -30,8 +30,6 @@ #include "mbfilter.h" #include "mbfilter_utf8.h" -int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter); - const unsigned char mblen_table_utf8[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -57,19 +55,13 @@ const mbfl_encoding mbfl_encoding_utf8 = { mbfl_no_encoding_utf8, "UTF-8", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_aliases, + mbfl_encoding_utf8_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_wchar, &vtbl_wchar_utf8 }; -const struct mbfl_identify_vtbl vtbl_identify_utf8 = { - mbfl_no_encoding_utf8, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - const struct mbfl_convert_vtbl vtbl_utf8_wchar = { mbfl_no_encoding_utf8, mbfl_no_encoding_wchar, @@ -236,76 +228,3 @@ int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter) return c; } - -int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter) -{ - int c1; - - c1 = (filter->status >> 8) & 0xff; - filter->status &= 0xff; - - if (c < 0x80) { - if (c < 0) { - filter->flag = 1; /* bad */ - } else if (filter->status) { - filter->flag = 1; /* bad */ - } - filter->status = 0; - } else if (c < 0xc0) { - switch (filter->status) { - case 0x20: /* 3 byte code 2nd char */ - if ((c1 == 0x0 && c >= 0xa0) || - (c1 == 0xd && c < 0xa0) || - (c1 > 0x0 && c1 != 0xd)) { - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - break; - case 0x30: /* 4 byte code 2nd char */ - if ((c1 == 0x0 && c >= 0x90) || - (c1 > 0x0 && c1 < 0x4) || - (c1 == 0x4 && c < 0x90)) { - filter->status++; - } else { - filter->flag = 1; /* bad */ - filter->status = 0; - } - break; - case 0x31: /* 4 byte code 3rd char */ - filter->status++; - break; - case 0x10: /* 2 byte code 2nd char */ - case 0x21: /* 3 byte code 3rd char */ - case 0x32: /* 4 byte code 4th char */ - filter->status = 0; - break; - default: - filter->flag = 1; /* bad */ - filter->status = 0; - break; - } - } else if (c < 0xc2) { /* 0xc0,0xc1 */ - filter->flag = 1; /* bad */ - filter->status = 0; - } else { - if (filter->status) { - filter->flag = 1; /* bad */ - } - filter->status = 0; - if (c < 0xe0) { /* 2 byte code first char */ - filter->status = 0x10; - } else if (c < 0xf0) { /* 3 byte code 1st char */ - filter->status = 0x20; - filter->status |= (c & 0xf) << 8; - } else if (c < 0xf5) { /* 4 byte code 1st char */ - filter->status = 0x30; - filter->status |= (c & 0x7) << 8; - } else { - filter->flag = 1; /* bad */ - } - } - - return c; -} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h index b0c93ccd3d..24cb91ea5a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h @@ -31,7 +31,6 @@ #define MBFL_MBFILTER_UTF8_H extern const mbfl_encoding mbfl_encoding_utf8; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8; extern const struct mbfl_convert_vtbl vtbl_utf8_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf8; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c index ef8d4cc075..763ed90fab 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c @@ -32,7 +32,6 @@ #include "mbfilter_utf8_mobile.h" #include "mbfilter_sjis_mobile.h" -extern int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter); extern int mbfl_filt_conv_utf8_wchar_flush(mbfl_convert_filter *filter); extern const unsigned char mblen_table_utf8[]; @@ -46,7 +45,7 @@ const mbfl_encoding mbfl_encoding_utf8_docomo = { mbfl_no_encoding_utf8_docomo, "UTF-8-Mobile#DOCOMO", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_docomo_aliases, + mbfl_encoding_utf8_docomo_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_docomo_wchar, @@ -57,7 +56,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_a = { mbfl_no_encoding_utf8_kddi_a, "UTF-8-Mobile#KDDI-A", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_kddi_a_aliases, + mbfl_encoding_utf8_kddi_a_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_kddi_a_wchar, @@ -68,7 +67,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_b = { mbfl_no_encoding_utf8_kddi_b, "UTF-8-Mobile#KDDI-B", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_kddi_b_aliases, + mbfl_encoding_utf8_kddi_b_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_kddi_b_wchar, @@ -79,37 +78,13 @@ const mbfl_encoding mbfl_encoding_utf8_sb = { mbfl_no_encoding_utf8_sb, "UTF-8-Mobile#SOFTBANK", "UTF-8", - (const char *(*)[])&mbfl_encoding_utf8_sb_aliases, + mbfl_encoding_utf8_sb_aliases, mblen_table_utf8, MBFL_ENCTYPE_MBCS, &vtbl_utf8_sb_wchar, &vtbl_wchar_utf8_sb }; -const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo = { - mbfl_no_encoding_utf8_docomo, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_a = { - mbfl_no_encoding_utf8_kddi_a, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_b = { - mbfl_no_encoding_utf8_kddi_b, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - -const struct mbfl_identify_vtbl vtbl_identify_utf8_sb = { - mbfl_no_encoding_utf8_sb, - mbfl_filt_ident_common_ctor, - mbfl_filt_ident_utf8 -}; - const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar = { mbfl_no_encoding_utf8_docomo, mbfl_no_encoding_wchar, diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h index 74ac6e195e..116bc16299 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h @@ -35,11 +35,6 @@ extern const mbfl_encoding mbfl_encoding_utf8_kddi_a; extern const mbfl_encoding mbfl_encoding_utf8_kddi_b; extern const mbfl_encoding mbfl_encoding_utf8_sb; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_a; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_b; -extern const struct mbfl_identify_vtbl vtbl_identify_utf8_sb; - extern const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_utf8_docomo; extern const struct mbfl_convert_vtbl vtbl_utf8_kddi_a_wchar; diff --git a/ext/mbstring/libmbfl/filters/unicode_prop.h b/ext/mbstring/libmbfl/filters/unicode_prop.h index 6eaefbc2e3..1ecf42c556 100644 --- a/ext/mbstring/libmbfl/filters/unicode_prop.h +++ b/ext/mbstring/libmbfl/filters/unicode_prop.h @@ -19,148 +19,136 @@ * Suite 330, Boston, MA 02111-1307 USA * * The authors of this file: PHP3 Internationalization team - * - */ - -/* character property table */ -#define MBFL_CHP_CTL 0x01 -#define MBFL_CHP_DIGIT 0x02 -#define MBFL_CHP_UALPHA 0x04 -#define MBFL_CHP_LALPHA 0x08 -#define MBFL_CHP_MMHQENC 0x10 /* must Q-encoding in MIME Header encoded-word */ -#define MBFL_CHP_MSPECIAL 0x20 /* RFC822 Special characters */ - -/* - * Unicode table */ -static const unsigned char mbfl_charprop_table[] = { -/* NUL 0 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC, -/* SCH 1 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SIX 2 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EIX 3 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EOT 4 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* ENQ 5 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* ACK 6 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* BEL 7 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* BS 8 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* HI 9 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* LF 10 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* VI 11 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* FF 12 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* CR 13 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SO 14 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SI 15 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SLE 16 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* CSI 17 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* DC2 18 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* DC3 19 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* DC4 20 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* NAK 21 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SYN 22 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EIB 23 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* CAN 24 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* EM 25 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SLB 26 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* ESC 27 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* FS 28 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* GS 29 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* RS 30 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* US 31 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , -/* SP 32 */ MBFL_CHP_MMHQENC , -/* ! 33 */ 0 , -/* " 34 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* # 35 */ MBFL_CHP_MMHQENC , -/* $ 36 */ MBFL_CHP_MMHQENC , -/* % 37 */ MBFL_CHP_MMHQENC , -/* & 38 */ MBFL_CHP_MMHQENC , -/* ' 39 */ MBFL_CHP_MMHQENC , -/* ( 40 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ) 41 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* * 42 */ 0 , -/* + 43 */ 0 , -/* , 44 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* - 45 */ 0 , -/* . 46 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* / 47 */ 0 , -/* 0 48 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 1 49 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 2 50 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 3 51 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 4 52 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 5 53 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 6 54 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 7 55 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 8 56 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* 9 57 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , -/* : 58 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ; 59 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* < 60 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* = 61 */ 0 , -/* > 62 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ? 63 */ MBFL_CHP_MMHQENC , -/* @ 64 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* A 65 */ MBFL_CHP_UALPHA , -/* B 66 */ MBFL_CHP_UALPHA , -/* C 67 */ MBFL_CHP_UALPHA , -/* D 68 */ MBFL_CHP_UALPHA , -/* E 69 */ MBFL_CHP_UALPHA , -/* F 70 */ MBFL_CHP_UALPHA , -/* G 71 */ MBFL_CHP_UALPHA , -/* H 72 */ MBFL_CHP_UALPHA , -/* I 73 */ MBFL_CHP_UALPHA , -/* J 74 */ MBFL_CHP_UALPHA , -/* K 75 */ MBFL_CHP_UALPHA , -/* L 76 */ MBFL_CHP_UALPHA , -/* M 77 */ MBFL_CHP_UALPHA , -/* N 78 */ MBFL_CHP_UALPHA , -/* O 79 */ MBFL_CHP_UALPHA , -/* P 80 */ MBFL_CHP_UALPHA , -/* Q 81 */ MBFL_CHP_UALPHA , -/* R 82 */ MBFL_CHP_UALPHA , -/* S 83 */ MBFL_CHP_UALPHA , -/* T 84 */ MBFL_CHP_UALPHA , -/* U 85 */ MBFL_CHP_UALPHA , -/* V 86 */ MBFL_CHP_UALPHA , -/* W 87 */ MBFL_CHP_UALPHA , -/* X 88 */ MBFL_CHP_UALPHA , -/* Y 89 */ MBFL_CHP_UALPHA , -/* Z 90 */ MBFL_CHP_UALPHA , -/* [ 91 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* \ 92 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ] 93 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , -/* ^ 94 */ MBFL_CHP_MMHQENC , -/* _ 95 */ MBFL_CHP_MMHQENC , -/* ` 96 */ MBFL_CHP_MMHQENC , -/* a 97 */ MBFL_CHP_LALPHA , -/* b 98 */ MBFL_CHP_LALPHA , -/* c 99 */ MBFL_CHP_LALPHA , -/* d 100 */ MBFL_CHP_LALPHA , -/* e 101 */ MBFL_CHP_LALPHA , -/* f 102 */ MBFL_CHP_LALPHA , -/* g 103 */ MBFL_CHP_LALPHA , -/* h 104 */ MBFL_CHP_LALPHA , -/* i 105 */ MBFL_CHP_LALPHA , -/* j 106 */ MBFL_CHP_LALPHA , -/* k 107 */ MBFL_CHP_LALPHA , -/* l 108 */ MBFL_CHP_LALPHA , -/* m 109 */ MBFL_CHP_LALPHA , -/* n 110 */ MBFL_CHP_LALPHA , -/* o 111 */ MBFL_CHP_LALPHA , -/* p 112 */ MBFL_CHP_LALPHA , -/* q 113 */ MBFL_CHP_LALPHA , -/* r 114 */ MBFL_CHP_LALPHA , -/* s 115 */ MBFL_CHP_LALPHA , -/* t 116 */ MBFL_CHP_LALPHA , -/* u 117 */ MBFL_CHP_LALPHA , -/* v 118 */ MBFL_CHP_LALPHA , -/* w 119 */ MBFL_CHP_LALPHA , -/* x 120 */ MBFL_CHP_LALPHA , -/* y 121 */ MBFL_CHP_LALPHA , -/* z 122 */ MBFL_CHP_LALPHA , -/* { 123 */ MBFL_CHP_MMHQENC , -/* | 124 */ MBFL_CHP_MMHQENC , -/* } 125 */ MBFL_CHP_MMHQENC , -/* ~ 126 */ MBFL_CHP_MMHQENC , -/* DEL 127 */ MBFL_CHP_MMHQENC +/* Should we use QPrint-encoding in MIME Header encoded-word? */ +static const unsigned char mime_char_needs_qencode[] = { +/* NUL 0 */ 1, +/* SCH 1 */ 1, +/* SIX 2 */ 1, +/* EIX 3 */ 1, +/* EOT 4 */ 1, +/* ENQ 5 */ 1, +/* ACK 6 */ 1, +/* BEL 7 */ 1, +/* BS 8 */ 1, +/* HI 9 */ 1, +/* LF 10 */ 1, +/* VI 11 */ 1, +/* FF 12 */ 1, +/* CR 13 */ 1, +/* SO 14 */ 1, +/* SI 15 */ 1, +/* SLE 16 */ 1, +/* CSI 17 */ 1, +/* DC2 18 */ 1, +/* DC3 19 */ 1, +/* DC4 20 */ 1, +/* NAK 21 */ 1, +/* SYN 22 */ 1, +/* EIB 23 */ 1, +/* CAN 24 */ 1, +/* EM 25 */ 1, +/* SLB 26 */ 1, +/* ESC 27 */ 1, +/* FS 28 */ 1, +/* GS 29 */ 1, +/* RS 30 */ 1, +/* US 31 */ 1, +/* SP 32 */ 1, +/* ! 33 */ 0, +/* " 34 */ 1, +/* # 35 */ 1, +/* $ 36 */ 1, +/* % 37 */ 1, +/* & 38 */ 1, +/* ' 39 */ 1, +/* ( 40 */ 1, +/* ) 41 */ 1, +/* * 42 */ 0, +/* + 43 */ 0, +/* , 44 */ 1, +/* - 45 */ 0, +/* . 46 */ 1, +/* / 47 */ 0, +/* 0 48 */ 1, +/* 1 49 */ 1, +/* 2 50 */ 1, +/* 3 51 */ 1, +/* 4 52 */ 1, +/* 5 53 */ 1, +/* 6 54 */ 1, +/* 7 55 */ 1, +/* 8 56 */ 1, +/* 9 57 */ 1, +/* : 58 */ 1, +/* ; 59 */ 1, +/* < 60 */ 1, +/* = 61 */ 0, +/* > 62 */ 1, +/* ? 63 */ 1, +/* @ 64 */ 1, +/* A 65 */ 0, +/* B 66 */ 0, +/* C 67 */ 0, +/* D 68 */ 0, +/* E 69 */ 0, +/* F 70 */ 0, +/* G 71 */ 0, +/* H 72 */ 0, +/* I 73 */ 0, +/* J 74 */ 0, +/* K 75 */ 0, +/* L 76 */ 0, +/* M 77 */ 0, +/* N 78 */ 0, +/* O 79 */ 0, +/* P 80 */ 0, +/* Q 81 */ 0, +/* R 82 */ 0, +/* S 83 */ 0, +/* T 84 */ 0, +/* U 85 */ 0, +/* V 86 */ 0, +/* W 87 */ 0, +/* X 88 */ 0, +/* Y 89 */ 0, +/* Z 90 */ 0, +/* [ 91 */ 1, +/* \ 92 */ 1, +/* ] 93 */ 1, +/* ^ 94 */ 1, +/* _ 95 */ 1, +/* ` 96 */ 1, +/* a 97 */ 0, +/* b 98 */ 0, +/* c 99 */ 0, +/* d 100 */ 0, +/* e 101 */ 0, +/* f 102 */ 0, +/* g 103 */ 0, +/* h 104 */ 0, +/* i 105 */ 0, +/* j 106 */ 0, +/* k 107 */ 0, +/* l 108 */ 0, +/* m 109 */ 0, +/* n 110 */ 0, +/* o 111 */ 0, +/* p 112 */ 0, +/* q 113 */ 0, +/* r 114 */ 0, +/* s 115 */ 0, +/* t 116 */ 0, +/* u 117 */ 0, +/* v 118 */ 0, +/* w 119 */ 0, +/* x 120 */ 0, +/* y 121 */ 0, +/* z 122 */ 0, +/* { 123 */ 1, +/* | 124 */ 1, +/* } 125 */ 1, +/* ~ 126 */ 1, +/* DEL 127 */ 1 }; diff --git a/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h b/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h deleted file mode 100644 index abf89867ea..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: Hayk Chamyan <hamshen@gmail.com> - * - */ - -#ifndef UNICODE_TABLE_ARMSCII8_H -#define UNICODE_TABLE_ARMSCII8_H - -/* ArmSCII-8 to Unicode table */ -static const unsigned short armscii8_ucs_table[] = { -/*0x00a0, 0x00a1, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab,*/ -0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, -0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c, -0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, -0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, -0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, -0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, -0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, -0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, -0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, -0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, -0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, -/*0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0x00ff*/ -0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd -}; - -static const unsigned char ucs_armscii8_table[] = { -0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f -}; - -static const int armscii8_ucs_table_min = 0xa0; -static const int armscii8_ucs_table_len = (sizeof (armscii8_ucs_table) / sizeof (unsigned short)); -static const int armscii8_ucs_table_max = 0xa0 + (sizeof (armscii8_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_ARMSCII8_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h deleted file mode 100644 index f504713805..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The authors of this file: PHP3 internationalization team - * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>. - * - */ - -#ifndef UNICODE_TABLE_CP1251_H - -/* cp1251 to Unicode table */ -static const unsigned short cp1251_ucs_table[] = { - 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, - 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, - 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, - 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, - 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, - 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, - 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f -}; -static const int cp1251_ucs_table_min = 0x80; -static const int cp1251_ucs_table_len = (sizeof (cp1251_ucs_table) / sizeof (unsigned short)); -static const int cp1251_ucs_table_max = 0x80 + (sizeof (cp1251_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP1251_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h index 92d20893cd..9eb813885b 100644 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h @@ -32,9 +32,9 @@ * as it only covers this range, while the rest cover 0xa0 onwards */ static const unsigned short cp1252_ucs_table[] = { - 0x20ac,0xfffd,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021, - 0x02c6,0x2030,0x0160,0x2039,0x0152,0xfffd,0x017d,0xfffd, - 0xfffd,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014, - 0x02dc,0x2122,0x0161,0x203a,0x0153,0xfffd,0x017e,0x0178 + 0x20ac,0x0000,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021, + 0x02c6,0x2030,0x0160,0x2039,0x0152,0x0000,0x017d,0x0000, + 0x0000,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014, + 0x02dc,0x2122,0x0161,0x203a,0x0153,0x0000,0x017e,0x0178 }; #endif /* UNICODE_TABLE_CP1252_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h deleted file mode 100644 index 7a9c4424ad..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The authors of this file: PHP3 internationalization team - * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>. - * - */ - -#ifndef UNICODE_TABLE_CP1254_H - -/* cp1254 to Unicode table */ -static const unsigned short cp1254_ucs_table[] = { - 0x20ac, 0xfffe, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, - 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffe, 0xfffe, 0xfffe, - 0xfffe, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffe, 0xfffe, 0x0178, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff -}; -static const int cp1254_ucs_table_min = 0x80; -static const int cp1254_ucs_table_len = (sizeof (cp1254_ucs_table) / sizeof (unsigned short)); -static const int cp1254_ucs_table_max = 0x80 + (sizeof (cp1254_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP1254_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp850.h b/ext/mbstring/libmbfl/filters/unicode_table_cp850.h deleted file mode 100644 index 57fb61dbc9..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp850.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Den V. Tsopa <tdv@edisoft.ru> - * Adaption for CP850: D. Giffeler <dg@artegic.de> - * - */ - -#ifndef UNICODE_TABLE_CP850_H -#define UNICODE_TABLE_CP850_H - -/* cp850_DOS to Unicode table */ -static const unsigned short cp850_ucs_table[] = { - 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7 -, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5 -, 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9 -, 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192 -, 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba -, 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb -, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0 -, 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510 -, 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3 -, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4 -, 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce -, 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580 -, 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe -, 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4 -, 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8 -, 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 -}; -static const int cp850_ucs_table_min = 0x80; -static const int cp850_ucs_table_len = (sizeof (cp850_ucs_table) / sizeof (unsigned short)); -static const int cp850_ucs_table_max = 0x80 + (sizeof (cp850_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP850_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h b/ext/mbstring/libmbfl/filters/unicode_table_cp866.h deleted file mode 100644 index 468e1a77c2..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The original author of this file: Den V. Tsopa <tdv@edisoft.ru> - * - */ - -#ifndef UNICODE_TABLE_CP866_H -#define UNICODE_TABLE_CP866_H - -/* cp866_DOSCyrillicRussian to Unicode table */ -static const unsigned short cp866_ucs_table[] = { - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, - 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, - 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, - 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, - 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0 -}; -static const int cp866_ucs_table_min = 0x80; -static const int cp866_ucs_table_len = (sizeof (cp866_ucs_table) / sizeof (unsigned short)); -static const int cp866_ucs_table_max = 0x80 + (sizeof (cp866_ucs_table) / sizeof (unsigned short)); - -#endif /* UNICODE_TABLE_CP866_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h deleted file mode 100644 index 2b6b78f32b..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_10_H -static const int iso8859_10_ucs_table[] = { - 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, - 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, - 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, - 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138 -}; -#endif /* UNICODE_TABLE_ISO8859_10_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h deleted file mode 100644 index 5822396525..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_13_H -static const int iso8859_13_ucs_table[] = { - 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, - 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, - 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, - 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, - 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, - 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, - 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, - 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, - 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, - 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, - 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019 -}; -#endif /* UNICODE_TABLE_ISO8859_13_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h deleted file mode 100644 index 6bd03b367a..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_14_H -static const int iso8859_14_ucs_table[] = { - 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, - 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, - 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, - 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff -}; -#endif /* UNICODE_TABLE_ISO8859_14_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h deleted file mode 100644 index 029a2bcfc4..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_15_H -static const int iso8859_15_ucs_table[] = { - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, - 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, - 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}; -#endif /* UNICODE_TABLE_ISO8859_15_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h deleted file mode 100644 index 555472d0dc..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLEISO8859_16_H -static const int iso8859_16_ucs_table[] = { - 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, - 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, - 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, - 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, - 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, - 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff -}; -#endif /* UNICODE_TABLEISO8859_16_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h deleted file mode 100644 index 12bb3cb2dc..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_2_H -static const int iso8859_2_ucs_table[] = { - 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, - 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, - 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, - 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, - 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, - 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, - 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, - 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, - 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, - 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 -}; -#endif /* UNICODE_TABLE_ISO8859_2_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h deleted file mode 100644 index f50c348aff..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_3_H -static const int iso8859_3_ucs_table[] = { - 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7, - 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b, - 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, - 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, - 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, - 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9 -}; -#endif /* UNICODE_TABLE_ISO8859_3_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h deleted file mode 100644 index ff7ecdb4c0..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_4_H -static const int iso8859_4_ucs_table[] = { - 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, - 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, - 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, - 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, - 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, - 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9 -}; -#endif /* UNICODE_TABLE_ISO8859_4_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h deleted file mode 100644 index 411ab84b60..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_5_H -static const int iso8859_5_ucs_table[] = { - 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, - 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f -}; -#endif /* UNICODE_TABLE_ISO8859_5_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h deleted file mode 100644 index 0b3952e3a0..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_6_H -static const int iso8859_6_ucs_table[] = { - 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, - 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, - 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, - 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, - 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; -#endif /* UNICODE_TABLE_ISO8859_6_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h deleted file mode 100644 index 687f4cbc74..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_7_H -static const int iso8859_7_ucs_table[] = { - 0x00a0, 0x2018, 0x2019, 0x00a3, 0x20ac, 0x20af, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x037a, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, - 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, - 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000 -}; -#endif /* UNICODE_TABLE_ISO8859_7_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h deleted file mode 100644 index 4ec6490bae..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_8_H -static const int iso8859_8_ucs_table[] = { - 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000 -}; -#endif /* UNICODE_TABLE_ISO8859_8_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h deleted file mode 100644 index 12f988ad7a..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h +++ /dev/null @@ -1,17 +0,0 @@ -/* This file is automatically generated. Do not edit! */ -#ifndef UNICODE_TABLE_ISO8859_9_H -static const int iso8859_9_ucs_table[] = { - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff -}; -#endif /* UNICODE_TABLE_ISO8859_9_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h deleted file mode 100644 index fc850e5685..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The original author of this file: Den V. Tsopa <tdv@edisoft.ru> - * - */ - -#ifndef UNICODE_TABLE_KOI8R_H -#define UNICODE_TABLE_KOI8R_H - -/* KOI8-R (RFC1489) to Unicode */ -static const unsigned short koi8r_ucs_table[] = { - 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, - 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, - 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, - 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, - 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; -static const int koi8r_ucs_table_min = 0x80; -static const int koi8r_ucs_table_len = (sizeof (koi8r_ucs_table) / sizeof (unsigned short)); -static const int koi8r_ucs_table_max = 0x80 + (sizeof (koi8r_ucs_table) / sizeof (unsigned short)); - - - -#endif /* UNNICODE_TABLE_KOI8R_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h deleted file mode 100644 index e59c685fe8..0000000000 --- a/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this part: Maksym Veremeyenko <verem@m1.tv> - * - */ - -#ifndef UNICODE_TABLE_KOI8U_H -#define UNICODE_TABLE_KOI8U_H - -/* KOI8-U (RFC2319) to Unicode */ -static const unsigned short koi8u_ucs_table[] = { - 0x2500, /* BOX DRAWINGS LIGHT HORIZONTAL */ - 0x2502, /* BOX DRAWINGS LIGHT VERTICAL */ - 0x250C, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ - 0x2510, /* BOX DRAWINGS LIGHT DOWN AND LEFT */ - 0x2514, /* BOX DRAWINGS LIGHT UP AND RIGHT */ - 0x2518, /* BOX DRAWINGS LIGHT UP AND LEFT */ - 0x251C, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ - 0x2524, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ - 0x252C, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ - 0x2534, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ - 0x253C, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ - 0x2580, /* UPPER HALF BLOCK */ - 0x2584, /* LOWER HALF BLOCK */ - 0x2588, /* FULL BLOCK */ - 0x258C, /* LEFT HALF BLOCK */ - 0x2590, /* RIGHT HALF BLOCK */ - 0x2591, /* LIGHT SHADE */ - 0x2592, /* MEDIUM SHADE */ - 0x2593, /* DARK SHADE */ - 0x2320, /* TOP HALF INTEGRAL */ - 0x25A0, /* BLACK SQUARE */ - 0x2219, /* BULLET OPERATOR */ - 0x221A, /* SQUARE ROOT */ - 0x2248, /* ALMOST EQUAL TO */ - 0x2264, /* LESS THAN OR EQUAL TO */ - 0x2265, /* GREATER THAN OR EQUAL TO */ - 0x00A0, /* NO-BREAK SPACE */ - 0x2321, /* BOTTOM HALF INTEGRAL */ - 0x00B0, /* DEGREE SIGN */ - 0x00B2, /* SUPERSCRIPT TWO */ - 0x00B7, /* MIDDLE DOT */ - 0x00F7, /* DIVISION SIGN */ - 0x2550, /* BOX DRAWINGS DOUBLE HORIZONTAL */ - 0x2551, /* BOX DRAWINGS DOUBLE VERTICAL */ - 0x2552, /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */ - 0x0451, /* CYRILLIC SMALL LETTER IO */ - 0x0454, /* CYRILLIC SMALL LETTER UKRAINIAN IE */ - 0x2554, /* BOX DRAWINGS DOUBLE DOWN AND RIGHT */ - 0x0456, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ - 0x0457, /* CYRILLIC SMALL LETTER YI (UKRAINIAN) */ - 0x2557, /* BOX DRAWINGS DOUBLE DOWN AND LEFT */ - 0x2558, /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */ - 0x2559, /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */ - 0x255A, /* BOX DRAWINGS DOUBLE UP AND RIGHT */ - 0x255B, /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */ - 0x0491, /* CYRILLIC SMALL LETTER GHE WITH UPTURN */ - 0x255D, /* BOX DRAWINGS DOUBLE UP AND LEFT */ - 0x255E, /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */ - 0x255F, /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */ - 0x2560, /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */ - 0x2561, /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE */ - 0x0401, /* CYRILLIC CAPITAL LETTER IO */ - 0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ - 0x2563, /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT */ - 0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ - 0x0407, /* CYRILLIC CAPITAL LETTER YI (UKRAINIAN) */ - 0x2566, /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */ - 0x2567, /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */ - 0x2568, /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */ - 0x2569, /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL */ - 0x256A, /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */ - 0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ - 0x256C, /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */ - 0x00A9, /* COPYRIGHT SIGN */ - 0x044E, /* CYRILLIC SMALL LETTER YU */ - 0x0430, /* CYRILLIC SMALL LETTER A */ - 0x0431, /* CYRILLIC SMALL LETTER BE */ - 0x0446, /* CYRILLIC SMALL LETTER TSE */ - 0x0434, /* CYRILLIC SMALL LETTER DE */ - 0x0435, /* CYRILLIC SMALL LETTER IE */ - 0x0444, /* CYRILLIC SMALL LETTER EF */ - 0x0433, /* CYRILLIC SMALL LETTER GHE */ - 0x0445, /* CYRILLIC SMALL LETTER KHA */ - 0x0438, /* CYRILLIC SMALL LETTER I */ - 0x0439, /* CYRILLIC SMALL LETTER SHORT I */ - 0x043A, /* CYRILLIC SMALL LETTER KA */ - 0x043B, /* CYRILLIC SMALL LETTER EL */ - 0x043C, /* CYRILLIC SMALL LETTER EM */ - 0x043D, /* CYRILLIC SMALL LETTER EN */ - 0x043E, /* CYRILLIC SMALL LETTER O */ - 0x043F, /* CYRILLIC SMALL LETTER PE */ - 0x044F, /* CYRILLIC SMALL LETTER YA */ - 0x0440, /* CYRILLIC SMALL LETTER ER */ - 0x0441, /* CYRILLIC SMALL LETTER ES */ - 0x0442, /* CYRILLIC SMALL LETTER TE */ - 0x0443, /* CYRILLIC SMALL LETTER U */ - 0x0436, /* CYRILLIC SMALL LETTER ZHE */ - 0x0432, /* CYRILLIC SMALL LETTER VE */ - 0x044C, /* CYRILLIC SMALL LETTER SOFT SIGN */ - 0x044B, /* CYRILLIC SMALL LETTER YERU */ - 0x0437, /* CYRILLIC SMALL LETTER ZE */ - 0x0448, /* CYRILLIC SMALL LETTER SHA */ - 0x044D, /* CYRILLIC SMALL LETTER E */ - 0x0449, /* CYRILLIC SMALL LETTER SHCHA */ - 0x0447, /* CYRILLIC SMALL LETTER CHE */ - 0x044A, /* CYRILLIC SMALL LETTER HARD SIGN */ - 0x042E, /* CYRILLIC CAPITAL LETTER YU */ - 0x0410, /* CYRILLIC CAPITAL LETTER A */ - 0x0411, /* CYRILLIC CAPITAL LETTER BE */ - 0x0426, /* CYRILLIC CAPITAL LETTER TSE */ - 0x0414, /* CYRILLIC CAPITAL LETTER DE */ - 0x0415, /* CYRILLIC CAPITAL LETTER IE */ - 0x0424, /* CYRILLIC CAPITAL LETTER EF */ - 0x0413, /* CYRILLIC CAPITAL LETTER GHE */ - 0x0425, /* CYRILLIC CAPITAL LETTER KHA */ - 0x0418, /* CYRILLIC CAPITAL LETTER I */ - 0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */ - 0x041A, /* CYRILLIC CAPITAL LETTER KA */ - 0x041B, /* CYRILLIC CAPITAL LETTER EL */ - 0x041C, /* CYRILLIC CAPITAL LETTER EM */ - 0x041D, /* CYRILLIC CAPITAL LETTER EN */ - 0x041E, /* CYRILLIC CAPITAL LETTER O */ - 0x041F, /* CYRILLIC CAPITAL LETTER PE */ - 0x042F, /* CYRILLIC CAPITAL LETTER YA */ - 0x0420, /* CYRILLIC CAPITAL LETTER ER */ - 0x0421, /* CYRILLIC CAPITAL LETTER ES */ - 0x0422, /* CYRILLIC CAPITAL LETTER TE */ - 0x0423, /* CYRILLIC CAPITAL LETTER U */ - 0x0416, /* CYRILLIC CAPITAL LETTER ZHE */ - 0x0412, /* CYRILLIC CAPITAL LETTER VE */ - 0x042C, /* CYRILLIC CAPITAL LETTER SOFT SIGN */ - 0x042B, /* CYRILLIC CAPITAL LETTER YERU */ - 0x0417, /* CYRILLIC CAPITAL LETTER ZE */ - 0x0428, /* CYRILLIC CAPITAL LETTER SHA */ - 0x042D, /* CYRILLIC CAPITAL LETTER E */ - 0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */ - 0x0427, /* CYRILLIC CAPITAL LETTER CHE */ - 0x042A /* CYRILLIC CAPITAL LETTER HARD SIGN */ -}; -static const int koi8u_ucs_table_min = 0x80; -static const int koi8u_ucs_table_len = (sizeof (koi8u_ucs_table) / sizeof (unsigned short)); -static const int koi8u_ucs_table_max = 0x80 + (sizeof (koi8u_ucs_table) / sizeof (unsigned short)); - - - -#endif /* UNNICODE_TABLE_KOI8U_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c index 793dd8e078..a20960f926 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c @@ -86,9 +86,11 @@ #include "mbfl_filter_output.h" #include "mbfilter_8bit.h" #include "mbfilter_wchar.h" -#include "filters/mbfilter_ascii.h" +#include "mbstring.h" +#include "php_unicode.h" #include "filters/mbfilter_base64.h" #include "filters/mbfilter_qprint.h" +#include "filters/mbfilter_singlebyte.h" #include "filters/mbfilter_tl_jisx0201_jisx0208.h" #include "filters/mbfilter_utf8.h" @@ -200,7 +202,6 @@ size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *str size_t n; unsigned char *p; mbfl_convert_filter *filter; - int (*filter_function)(int c, mbfl_convert_filter *filter); ZEND_ASSERT(convd); ZEND_ASSERT(string); @@ -212,9 +213,8 @@ size_t mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *str filter = convd->filter1; if (filter != NULL) { - filter_function = filter->filter_function; while (n > 0) { - if ((*filter_function)(*p++, filter) < 0) { + if ((*filter->filter_function)(*p++, filter) < 0) { return p - string->val; } n--; @@ -234,9 +234,6 @@ mbfl_buffer_converter_flush(mbfl_buffer_converter *convd) if (convd->filter1 != NULL) { mbfl_convert_filter_flush(convd->filter1); } - if (convd->filter2 != NULL) { - mbfl_convert_filter_flush(convd->filter2); - } return 0; } @@ -262,9 +259,6 @@ mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *str if (convd->filter1 != NULL) { mbfl_convert_filter_flush(convd->filter1); } - if (convd->filter2 != NULL) { - mbfl_convert_filter_flush(convd->filter2); - } result->encoding = convd->to; return mbfl_memory_device_result(&convd->device, result); } @@ -291,126 +285,102 @@ size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd) /* * encoding detector */ -mbfl_encoding_detector * -mbfl_encoding_detector_new(const mbfl_encoding **elist, int elistsz, int strict) +static int mbfl_estimate_encoding_likelihood(int c, void* data) { - mbfl_encoding_detector *identd; - - int i, num; - mbfl_identify_filter *filter; + mbfl_convert_filter *filter = *((mbfl_convert_filter**)data); + uintptr_t *score = (uintptr_t*)(&filter->opaque); + + /* Receive wchars decoded from test string using candidate encoding + * If the test string was invalid in the candidate encoding, we assume + * it's the wrong one. */ + if (c & MBFL_WCSGROUP_THROUGH) { + filter->num_illegalchar++; + } else if (php_unicode_is_cntrl(c) || php_unicode_is_private(c)) { + /* Otherwise, count how many control characters and 'private use' + * codepoints we see. Those are rarely used and may indicate that + * the candidate encoding is not the right one. */ + *score += 10; + } else if (php_unicode_is_punct(c)) { + /* Punctuation is also less common than letters/digits */ + (*score)++; + } + return c; +} - if (elist == NULL || elistsz <= 0) { +mbfl_encoding_detector *mbfl_encoding_detector_new(const mbfl_encoding **elist, int elistsz, int strict) +{ + if (!elistsz) { return NULL; } - /* allocate */ - identd = emalloc(sizeof(mbfl_encoding_detector)); - identd->filter_list = ecalloc(elistsz, sizeof(mbfl_identify_filter *)); - - /* create filters */ - i = 0; - num = 0; - while (i < elistsz) { - filter = mbfl_identify_filter_new2(elist[i]); - if (filter != NULL) { - identd->filter_list[num] = filter; - num++; - } - i++; + mbfl_encoding_detector *identd = emalloc(sizeof(mbfl_encoding_detector)); + identd->filter_list = ecalloc(elistsz, sizeof(mbfl_convert_filter*)); + for (int i = 0; i < elistsz; i++) { + identd->filter_list[i] = mbfl_convert_filter_new(elist[i], &mbfl_encoding_wchar, + mbfl_estimate_encoding_likelihood, NULL, &identd->filter_list[i]); + identd->filter_list[i]->opaque = (void*)0; } - identd->filter_list_size = num; - - /* set strict flag */ + identd->filter_list_size = elistsz; identd->strict = strict; - return identd; } - -void -mbfl_encoding_detector_delete(mbfl_encoding_detector *identd) +void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd) { - int i; - - if (identd != NULL) { - if (identd->filter_list != NULL) { - i = identd->filter_list_size; - while (i > 0) { - i--; - mbfl_identify_filter_delete(identd->filter_list[i]); - } - efree((void *)identd->filter_list); - } - efree((void *)identd); + for (int i = 0; i < identd->filter_list_size; i++) { + mbfl_convert_filter_delete(identd->filter_list[i]); } + efree(identd->filter_list); + efree(identd); } -int -mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string) +int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string) { - int res = 0; - /* feed data */ - if (identd != NULL && string != NULL && string->val != NULL) { - int num = identd->filter_list_size; - size_t n = string->len; - unsigned char *p = string->val; - int bad = 0; - while (n > 0) { - int i; - for (i = 0; i < num; i++) { - mbfl_identify_filter *filter = identd->filter_list[i]; - if (!filter->flag) { - (*filter->filter_function)(*p, filter); - if (filter->flag) { - bad++; - } + int num = identd->filter_list_size; + size_t n = string->len; + unsigned char *p = string->val; + int bad = 0; + + while (n--) { + for (int i = 0; i < num; i++) { + mbfl_convert_filter *filter = identd->filter_list[i]; + if (!filter->num_illegalchar) { + (*filter->filter_function)(*p, filter); + if (filter->num_illegalchar) { + bad++; } } - if ((num - 1) <= bad) { - res = 1; - break; - } - p++; - n--; } + if ((num - 1) <= bad && !identd->strict) { + return 1; + } + p++; } - return res; + if (identd->strict) { + for (int i = 0; i < num; i++) { + mbfl_convert_filter *filter = identd->filter_list[i]; + (filter->filter_flush)(filter); + } + } + + return 0; } const mbfl_encoding *mbfl_encoding_detector_judge(mbfl_encoding_detector *identd) { - mbfl_identify_filter *filter; - const mbfl_encoding *encoding = NULL; - int n; - - /* judge */ - if (identd != NULL) { - n = identd->filter_list_size - 1; - while (n >= 0) { - filter = identd->filter_list[n]; - if (!filter->flag) { - if (!identd->strict || !filter->status) { - encoding = filter->encoding; - } - } - n--; - } + uintptr_t best_score = UINT_MAX; /* Low score is 'better' */ + const mbfl_encoding *enc = NULL; - /* fallback judge */ - if (!encoding) { - n = identd->filter_list_size - 1; - while (n >= 0) { - filter = identd->filter_list[n]; - if (!filter->flag) { - encoding = filter->encoding; - } - n--; - } + for (int i = 0; i < identd->filter_list_size; i++) { + mbfl_convert_filter *filter = identd->filter_list[i]; + if (!filter->num_illegalchar && (uintptr_t)filter->opaque < best_score) { + enc = filter->from; + best_score = (uintptr_t)filter->opaque; } } - return encoding; + return enc; } /* @@ -479,83 +449,19 @@ mbfl_convert_encoding( return mbfl_memory_device_result(&device, result); } - /* * identify encoding */ -const mbfl_encoding * -mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict) +const mbfl_encoding *mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict) { - int i, num, bad; - size_t n; - unsigned char *p; - mbfl_identify_filter *flist, *filter; - const mbfl_encoding *encoding; - - /* flist is an array of mbfl_identify_filter instances */ - flist = ecalloc(elistsz, sizeof(mbfl_identify_filter)); - - num = 0; - if (elist != NULL) { - for (i = 0; i < elistsz; i++) { - if (!mbfl_identify_filter_init2(&flist[num], elist[i])) { - num++; - } - } - } - - /* feed data */ - n = string->len; - p = string->val; - - if (p != NULL) { - bad = 0; - while (n > 0) { - for (i = 0; i < num; i++) { - filter = &flist[i]; - if (!filter->flag) { - (*filter->filter_function)(*p, filter); - if (filter->flag) { - bad++; - } - } - } - if ((num - 1) <= bad && !strict) { - break; - } - p++; - n--; - } - } - - /* judge */ - encoding = NULL; - - for (i = 0; i < num; i++) { - filter = &flist[i]; - if (!filter->flag) { - if (strict && filter->status) { - continue; - } - encoding = filter->encoding; - break; - } - } - - /* fall-back judge */ - if (!encoding) { - for (i = 0; i < num; i++) { - filter = &flist[i]; - if (!filter->flag && (!strict || !filter->status)) { - encoding = filter->encoding; - break; - } - } + if (!elistsz) { + return NULL; } - - efree((void *)flist); - - return encoding; + mbfl_encoding_detector *identd = mbfl_encoding_detector_new(elist, elistsz, strict); + mbfl_encoding_detector_feed(identd, string); + const mbfl_encoding *enc = mbfl_encoding_detector_judge(identd); + mbfl_encoding_detector_delete(identd); + return enc; } /* diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.h b/ext/mbstring/libmbfl/mbfl/mbfilter.h index 16742be96c..b914a36c9e 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.h +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.h @@ -93,7 +93,6 @@ #include "mbfl_language.h" #include "mbfl_string.h" #include "mbfl_convert.h" -#include "mbfl_ident.h" /* Prefer local fix, otherwise need to include too much. */ #ifndef ssize_t @@ -156,7 +155,7 @@ MBFLAPI extern size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd); typedef struct _mbfl_encoding_detector mbfl_encoding_detector; struct _mbfl_encoding_detector { - mbfl_identify_filter **filter_list; + mbfl_convert_filter **filter_list; int filter_list_size; int strict; }; diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c index f4c74946c1..4017829cf8 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c @@ -43,7 +43,7 @@ const mbfl_encoding mbfl_encoding_8bit = { mbfl_no_encoding_8bit, "8bit", "8bit", - (const char *(*)[])&mbfl_encoding_8bit_aliases, + mbfl_encoding_8bit_aliases, NULL, MBFL_ENCTYPE_SBCS, &vtbl_8bit_wchar, diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c index 3d7cffe9c1..e43f746ecc 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c @@ -38,7 +38,7 @@ const mbfl_encoding mbfl_encoding_pass = { mbfl_no_encoding_pass, "pass", NULL, - (const char *(*)[])&mbfl_encoding_pass_aliases, + mbfl_encoding_pass_aliases, NULL, 0, NULL, diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h index 3e15400879..0f57310d5e 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h +++ b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h @@ -51,33 +51,12 @@ #define MBFL_WCSPLANE_JIS0208 0x70e10000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_JIS0212 0x70e20000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_WINCP932 0x70e30000 /* JIS HEX : 2121h - 9898h */ -#define MBFL_WCSPLANE_8859_1 0x70e40000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_2 0x70e50000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_3 0x70e60000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_4 0x70e70000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_5 0x70e80000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_6 0x70e90000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_7 0x70ea0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_8 0x70eb0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_9 0x70ec0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_10 0x70ed0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_13 0x70ee0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_14 0x70ef0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_8859_15 0x70f00000 /* 00h - FFh */ #define MBFL_WCSPLANE_KSC5601 0x70f10000 /* 2121h - 7E7Eh */ #define MBFL_WCSPLANE_GB2312 0x70f20000 /* 2121h - 7E7Eh */ #define MBFL_WCSPLANE_WINCP936 0x70f30000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_BIG5 0x70f40000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_CNS11643 0x70f50000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_UHC 0x70f60000 /* 8141h - fefeh */ -#define MBFL_WCSPLANE_CP1251 0x70f70000 -#define MBFL_WCSPLANE_CP866 0x70f80000 -#define MBFL_WCSPLANE_KOI8R 0x70f90000 -#define MBFL_WCSPLANE_8859_16 0x70fa0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_ARMSCII8 0x70fb0000 -#define MBFL_WCSPLANE_KOI8U 0x70fc0000 -#define MBFL_WCSPLANE_CP1254 0x70fd0000 /* 00h - FFh */ -#define MBFL_WCSPLANE_CP850 0x70fe0000 /* 00h - FFh */ #define MBFL_WCSPLANE_GB18030 0x70ff0000 /* a1a1h-e3329a35h */ #define MBFL_WCSGROUP_MASK 0xffffff #define MBFL_WCSGROUP_UCS4MAX 0x70000000 diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c index 6a46c2b541..cf35a4f4e4 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c @@ -57,29 +57,9 @@ #include "filters/mbfilter_euc_jp_2004.h" #include "filters/mbfilter_euc_jp_win.h" #include "filters/mbfilter_gb18030.h" -#include "filters/mbfilter_ascii.h" -#include "filters/mbfilter_koi8r.h" -#include "filters/mbfilter_koi8u.h" -#include "filters/mbfilter_cp866.h" #include "filters/mbfilter_cp932.h" #include "filters/mbfilter_cp936.h" -#include "filters/mbfilter_cp1251.h" -#include "filters/mbfilter_cp1252.h" -#include "filters/mbfilter_cp1254.h" #include "filters/mbfilter_cp5022x.h" -#include "filters/mbfilter_iso8859_1.h" -#include "filters/mbfilter_iso8859_2.h" -#include "filters/mbfilter_iso8859_3.h" -#include "filters/mbfilter_iso8859_4.h" -#include "filters/mbfilter_iso8859_5.h" -#include "filters/mbfilter_iso8859_6.h" -#include "filters/mbfilter_iso8859_7.h" -#include "filters/mbfilter_iso8859_8.h" -#include "filters/mbfilter_iso8859_9.h" -#include "filters/mbfilter_iso8859_10.h" -#include "filters/mbfilter_iso8859_13.h" -#include "filters/mbfilter_iso8859_14.h" -#include "filters/mbfilter_iso8859_15.h" #include "filters/mbfilter_base64.h" #include "filters/mbfilter_qprint.h" #include "filters/mbfilter_uuencode.h" @@ -90,13 +70,10 @@ #include "filters/mbfilter_utf8_mobile.h" #include "filters/mbfilter_utf16.h" #include "filters/mbfilter_utf32.h" -#include "filters/mbfilter_byte2.h" -#include "filters/mbfilter_byte4.h" #include "filters/mbfilter_ucs4.h" #include "filters/mbfilter_ucs2.h" #include "filters/mbfilter_htmlent.h" -#include "filters/mbfilter_armscii8.h" -#include "filters/mbfilter_cp850.h" +#include "filters/mbfilter_singlebyte.h" /* hex character table "0123456789ABCDEF" */ static char mbfl_hexchar_table[] = { @@ -115,7 +92,7 @@ static const struct mbfl_convert_vtbl *mbfl_special_filter_list[] = { NULL }; -static void mbfl_convert_filter_common_init(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to, +static void mbfl_convert_filter_init(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to, const struct mbfl_convert_vtbl *vtbl, output_function_t output_function, flush_function_t flush_function, void* data) { /* encoding structure */ @@ -136,13 +113,12 @@ static void mbfl_convert_filter_common_init(mbfl_convert_filter *filter, const m filter->filter_ctor = vtbl->filter_ctor; filter->filter_dtor = vtbl->filter_dtor; filter->filter_function = vtbl->filter_function; - filter->filter_flush = vtbl->filter_flush; + filter->filter_flush = (filter_flush_t)vtbl->filter_flush; filter->filter_copy = vtbl->filter_copy; (*filter->filter_ctor)(filter); } - mbfl_convert_filter* mbfl_convert_filter_new(const mbfl_encoding *from, const mbfl_encoding *to, output_function_t output_function, flush_function_t flush_function, void* data) { @@ -152,7 +128,7 @@ mbfl_convert_filter* mbfl_convert_filter_new(const mbfl_encoding *from, const mb } mbfl_convert_filter *filter = emalloc(sizeof(mbfl_convert_filter)); - mbfl_convert_filter_common_init(filter, from, to, vtbl, output_function, flush_function, data); + mbfl_convert_filter_init(filter, from, to, vtbl, output_function, flush_function, data); return filter; } @@ -163,7 +139,7 @@ mbfl_convert_filter* mbfl_convert_filter_new2(const struct mbfl_convert_vtbl *vt const mbfl_encoding *to_encoding = mbfl_no2encoding(vtbl->to); mbfl_convert_filter *filter = emalloc(sizeof(mbfl_convert_filter)); - mbfl_convert_filter_common_init(filter, from_encoding, to_encoding, vtbl, output_function, flush_function, data); + mbfl_convert_filter_init(filter, from_encoding, to_encoding, vtbl, output_function, flush_function, data); return filter; } @@ -195,7 +171,7 @@ unsigned char* mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, unsi int mbfl_convert_filter_flush(mbfl_convert_filter *filter) { (*filter->filter_flush)(filter); - return filter->flush_function ? (*filter->flush_function)(filter->data) : 0; + return 0; } void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to) @@ -210,8 +186,7 @@ void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding vtbl = &vtbl_pass; } - mbfl_convert_filter_common_init(filter, from, to, vtbl, - filter->output_function, filter->flush_function, filter->data); + mbfl_convert_filter_init(filter, from, to, vtbl, filter->output_function, filter->flush_function, filter->data); } void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest) @@ -287,9 +262,6 @@ int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter) case MBFL_WCSPLANE_GB18030: ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"GB+"); break; - case MBFL_WCSPLANE_8859_1: - ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"I8859_1+"); - break; default: ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"?+"); break; @@ -399,16 +371,12 @@ const struct mbfl_convert_vtbl* mbfl_convert_filter_get_vtbl(const mbfl_encoding */ void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter) { - filter->status = 0; - filter->cache = 0; + filter->status = filter->cache = 0; } int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter) { - filter->status = 0; - filter->cache = 0; - - if (filter->flush_function != NULL) { + if (filter->flush_function) { (*filter->flush_function)(filter->data); } return 0; diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c index 3ecb06553d..e558fba4b9 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c @@ -61,30 +61,9 @@ #include "filters/mbfilter_euc_jp_win.h" #include "filters/mbfilter_euc_jp_2004.h" #include "filters/mbfilter_gb18030.h" -#include "filters/mbfilter_ascii.h" -#include "filters/mbfilter_koi8r.h" -#include "filters/mbfilter_koi8u.h" -#include "filters/mbfilter_cp866.h" #include "filters/mbfilter_cp932.h" #include "filters/mbfilter_cp936.h" -#include "filters/mbfilter_cp1251.h" -#include "filters/mbfilter_cp1252.h" -#include "filters/mbfilter_cp1254.h" #include "filters/mbfilter_cp5022x.h" -#include "filters/mbfilter_iso8859_1.h" -#include "filters/mbfilter_iso8859_2.h" -#include "filters/mbfilter_iso8859_3.h" -#include "filters/mbfilter_iso8859_4.h" -#include "filters/mbfilter_iso8859_5.h" -#include "filters/mbfilter_iso8859_6.h" -#include "filters/mbfilter_iso8859_7.h" -#include "filters/mbfilter_iso8859_8.h" -#include "filters/mbfilter_iso8859_9.h" -#include "filters/mbfilter_iso8859_10.h" -#include "filters/mbfilter_iso8859_13.h" -#include "filters/mbfilter_iso8859_14.h" -#include "filters/mbfilter_iso8859_15.h" -#include "filters/mbfilter_iso8859_16.h" #include "filters/mbfilter_base64.h" #include "filters/mbfilter_qprint.h" #include "filters/mbfilter_uuencode.h" @@ -95,13 +74,10 @@ #include "filters/mbfilter_utf8_mobile.h" #include "filters/mbfilter_utf16.h" #include "filters/mbfilter_utf32.h" -#include "filters/mbfilter_byte2.h" -#include "filters/mbfilter_byte4.h" #include "filters/mbfilter_ucs4.h" #include "filters/mbfilter_ucs2.h" #include "filters/mbfilter_htmlent.h" -#include "filters/mbfilter_armscii8.h" -#include "filters/mbfilter_cp850.h" +#include "filters/mbfilter_singlebyte.h" #ifndef HAVE_STRCASECMP #ifdef HAVE_STRICMP @@ -112,10 +88,6 @@ static const mbfl_encoding *mbfl_encoding_ptr_list[] = { &mbfl_encoding_wchar, - &mbfl_encoding_byte2be, - &mbfl_encoding_byte2le, - &mbfl_encoding_byte4be, - &mbfl_encoding_byte4le, &mbfl_encoding_base64, &mbfl_encoding_uuencode, &mbfl_encoding_html_ent, @@ -199,44 +171,32 @@ static const mbfl_encoding *mbfl_encoding_ptr_list[] = { NULL }; -/* encoding resolver */ -const mbfl_encoding * -mbfl_name2encoding(const char *name) +const mbfl_encoding *mbfl_name2encoding(const char *name) { - const mbfl_encoding *encoding; - int i, j; + const mbfl_encoding **encoding; - if (name == NULL) { - return NULL; - } - - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ - if (strcasecmp(encoding->name, name) == 0) { - return encoding; + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if (strcasecmp((*encoding)->name, name) == 0) { + return *encoding; } } - /* serch MIME charset name */ - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { - if (encoding->mime_name != NULL) { - if (strcasecmp(encoding->mime_name, name) == 0) { - return encoding; + /* search MIME charset name */ + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if ((*encoding)->mime_name) { + if (strcasecmp((*encoding)->mime_name, name) == 0) { + return *encoding; } } } - /* serch aliases */ - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { - if (encoding->aliases != NULL) { - j = 0; - while ((*encoding->aliases)[j] != NULL) { - if (strcasecmp((*encoding->aliases)[j], name) == 0) { - return encoding; + /* search aliases */ + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if ((*encoding)->aliases) { + for (const char **alias = (*encoding)->aliases; *alias; alias++) { + if (strcasecmp(*alias, name) == 0) { + return *encoding; } - j++; } } } @@ -244,63 +204,45 @@ mbfl_name2encoding(const char *name) return NULL; } -const mbfl_encoding * -mbfl_no2encoding(enum mbfl_no_encoding no_encoding) +const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding) { - const mbfl_encoding *encoding; - int i; + const mbfl_encoding **encoding; - i = 0; - while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ - if (encoding->no_encoding == no_encoding) { - return encoding; + for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { + if ((*encoding)->no_encoding == no_encoding) { + return *encoding; } } return NULL; } -enum mbfl_no_encoding -mbfl_name2no_encoding(const char *name) +enum mbfl_no_encoding mbfl_name2no_encoding(const char *name) { - const mbfl_encoding *encoding; - - encoding = mbfl_name2encoding(name); - if (encoding == NULL) { - return mbfl_no_encoding_invalid; - } else { - return encoding->no_encoding; - } + const mbfl_encoding *encoding = mbfl_name2encoding(name); + return encoding ? encoding->no_encoding : mbfl_no_encoding_invalid; } -const char * -mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding) +const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding) { - const mbfl_encoding *encoding; - - encoding = mbfl_no2encoding(no_encoding); - if (encoding == NULL) { - return ""; - } else { - return encoding->name; - } + const mbfl_encoding *encoding = mbfl_no2encoding(no_encoding); + return encoding ? encoding->name : ""; } -const mbfl_encoding ** -mbfl_get_supported_encodings(void) +const mbfl_encoding **mbfl_get_supported_encodings(void) { return mbfl_encoding_ptr_list; } -const char * -mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding) +const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding) { - const mbfl_encoding *encoding; + return mbfl_encoding_preferred_mime_name(mbfl_no2encoding(no_encoding)); +} - encoding = mbfl_no2encoding(no_encoding); - if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') { +const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding) +{ + if (encoding->mime_name && encoding->mime_name[0] != '\0') { return encoding->mime_name; - } else { - return NULL; } + return NULL; } diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h index 0b39153c9d..40eb6e9bb9 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h @@ -37,10 +37,6 @@ enum mbfl_no_encoding { mbfl_no_encoding_invalid = -1, mbfl_no_encoding_pass, mbfl_no_encoding_wchar, - mbfl_no_encoding_byte2be, - mbfl_no_encoding_byte2le, - mbfl_no_encoding_byte4be, - mbfl_no_encoding_byte4le, mbfl_no_encoding_base64, mbfl_no_encoding_uuencode, mbfl_no_encoding_html_ent, @@ -145,19 +141,19 @@ typedef struct _mbfl_encoding { enum mbfl_no_encoding no_encoding; const char *name; const char *mime_name; - const char *(*aliases)[]; + const char **aliases; const unsigned char *mblen_table; unsigned int flag; const struct mbfl_convert_vtbl *input_filter; const struct mbfl_convert_vtbl *output_filter; } mbfl_encoding; -MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name); -MBFLAPI extern const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const mbfl_encoding *mbfl_name2encoding(const char *name); +MBFLAPI extern const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding); MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name); -MBFLAPI extern const mbfl_encoding ** mbfl_get_supported_encodings(); -MBFLAPI extern const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); -MBFLAPI extern const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); - +MBFLAPI extern const mbfl_encoding **mbfl_get_supported_encodings(); +MBFLAPI extern const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding); #endif /* MBFL_ENCODING_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c deleted file mode 100644 index 18144eb030..0000000000 --- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.c - * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file - * mbfilter.c is included in this package . - * - */ - -#include <stddef.h> - -#include "mbfl_ident.h" -#include "mbfilter_pass.h" -#include "mbfilter_8bit.h" -#include "mbfilter_wchar.h" - -#include "filters/mbfilter_euc_cn.h" -#include "filters/mbfilter_hz.h" -#include "filters/mbfilter_euc_tw.h" -#include "filters/mbfilter_big5.h" -#include "filters/mbfilter_uhc.h" -#include "filters/mbfilter_euc_kr.h" -#include "filters/mbfilter_iso2022_kr.h" -#include "filters/mbfilter_sjis.h" -#include "filters/mbfilter_sjis_open.h" -#include "filters/mbfilter_sjis_mobile.h" -#include "filters/mbfilter_jis.h" -#include "filters/mbfilter_iso2022_jp_ms.h" -#include "filters/mbfilter_iso2022jp_2004.h" -#include "filters/mbfilter_iso2022jp_mobile.h" -#include "filters/mbfilter_euc_jp.h" -#include "filters/mbfilter_euc_jp_win.h" -#include "filters/mbfilter_euc_jp_2004.h" -#include "filters/mbfilter_utf8_mobile.h" -#include "filters/mbfilter_ascii.h" -#include "filters/mbfilter_koi8r.h" -#include "filters/mbfilter_koi8u.h" -#include "filters/mbfilter_cp866.h" -#include "filters/mbfilter_cp932.h" -#include "filters/mbfilter_cp936.h" -#include "filters/mbfilter_cp1251.h" -#include "filters/mbfilter_cp1252.h" -#include "filters/mbfilter_cp1254.h" -#include "filters/mbfilter_cp51932.h" -#include "filters/mbfilter_cp5022x.h" -#include "filters/mbfilter_gb18030.h" -#include "filters/mbfilter_iso8859_1.h" -#include "filters/mbfilter_iso8859_2.h" -#include "filters/mbfilter_iso8859_3.h" -#include "filters/mbfilter_iso8859_4.h" -#include "filters/mbfilter_iso8859_5.h" -#include "filters/mbfilter_iso8859_6.h" -#include "filters/mbfilter_iso8859_7.h" -#include "filters/mbfilter_iso8859_8.h" -#include "filters/mbfilter_iso8859_9.h" -#include "filters/mbfilter_iso8859_10.h" -#include "filters/mbfilter_iso8859_13.h" -#include "filters/mbfilter_iso8859_14.h" -#include "filters/mbfilter_iso8859_15.h" -#include "filters/mbfilter_base64.h" -#include "filters/mbfilter_qprint.h" -#include "filters/mbfilter_uuencode.h" -#include "filters/mbfilter_7bit.h" -#include "filters/mbfilter_utf7.h" -#include "filters/mbfilter_utf7imap.h" -#include "filters/mbfilter_utf8.h" -#include "filters/mbfilter_utf16.h" -#include "filters/mbfilter_utf32.h" -#include "filters/mbfilter_byte2.h" -#include "filters/mbfilter_byte4.h" -#include "filters/mbfilter_ucs4.h" -#include "filters/mbfilter_ucs2.h" -#include "filters/mbfilter_htmlent.h" -#include "filters/mbfilter_armscii8.h" -#include "filters/mbfilter_cp850.h" - -static const struct mbfl_identify_vtbl vtbl_identify_false = { - mbfl_no_encoding_pass, - mbfl_filt_ident_false_ctor, - mbfl_filt_ident_false -}; - -static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = { - &vtbl_identify_utf8, - &vtbl_identify_utf7, - &vtbl_identify_ascii, - &vtbl_identify_eucjp, - &vtbl_identify_sjis, - &vtbl_identify_sjis_open, - &vtbl_identify_eucjpwin, - &vtbl_identify_eucjp2004, - &vtbl_identify_cp932, - &vtbl_identify_jis, - &vtbl_identify_2022jp, - &vtbl_identify_2022jpms, - &vtbl_identify_2022jp_2004, - &vtbl_identify_2022jp_kddi, - &vtbl_identify_cp51932, - &vtbl_identify_sjis_docomo, - &vtbl_identify_sjis_kddi, - &vtbl_identify_sjis_sb, - &vtbl_identify_utf8_docomo, - &vtbl_identify_utf8_kddi_a, - &vtbl_identify_utf8_kddi_b, - &vtbl_identify_utf8_sb, - &vtbl_identify_euccn, - &vtbl_identify_cp936, - &vtbl_identify_hz, - &vtbl_identify_euctw, - &vtbl_identify_big5, - &vtbl_identify_cp950, - &vtbl_identify_euckr, - &vtbl_identify_uhc, - &vtbl_identify_2022kr, - &vtbl_identify_cp1251, - &vtbl_identify_cp866, - &vtbl_identify_koi8r, - &vtbl_identify_koi8u, - &vtbl_identify_cp1252, - &vtbl_identify_cp1254, - &vtbl_identify_8859_1, - &vtbl_identify_8859_2, - &vtbl_identify_8859_3, - &vtbl_identify_8859_4, - &vtbl_identify_8859_5, - &vtbl_identify_8859_6, - &vtbl_identify_8859_7, - &vtbl_identify_8859_8, - &vtbl_identify_8859_9, - &vtbl_identify_8859_10, - &vtbl_identify_8859_13, - &vtbl_identify_8859_14, - &vtbl_identify_8859_15, - &vtbl_identify_armscii8, - &vtbl_identify_cp850, - &vtbl_identify_jis_ms, - &vtbl_identify_cp50220, - &vtbl_identify_cp50221, - &vtbl_identify_cp50222, - &vtbl_identify_gb18030, - &vtbl_identify_false, - NULL -}; - -/* - * identify filter - */ -const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding) -{ - const struct mbfl_identify_vtbl * vtbl; - int i; - - i = 0; - while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) { - if (vtbl->encoding == encoding) { - break; - } - } - - return vtbl; -} - -mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding) -{ - mbfl_identify_filter *filter = emalloc(sizeof(mbfl_identify_filter)); - if (mbfl_identify_filter_init(filter, encoding)) { - efree(filter); - return NULL; - } - - return filter; -} - -mbfl_identify_filter *mbfl_identify_filter_new2(const mbfl_encoding *encoding) -{ - mbfl_identify_filter *filter = emalloc(sizeof(mbfl_identify_filter)); - if (mbfl_identify_filter_init2(filter, encoding)) { - efree(filter); - return NULL; - } - - return filter; -} - - -int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding) -{ - const mbfl_encoding *enc = mbfl_no2encoding(encoding); - return mbfl_identify_filter_init2(filter, enc ? enc: &mbfl_encoding_pass); -} - -int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding) -{ - const struct mbfl_identify_vtbl *vtbl; - - /* encoding structure */ - filter->encoding = encoding; - - filter->status = 0; - filter->flag = 0; - filter->score = 0; - - /* setup the function table */ - vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding); - if (vtbl == NULL) { - vtbl = &vtbl_identify_false; - } - filter->filter_ctor = vtbl->filter_ctor; - filter->filter_function = vtbl->filter_function; - - /* constructor */ - (*filter->filter_ctor)(filter); - - return 0; -} - -void mbfl_identify_filter_delete(mbfl_identify_filter *filter) -{ - if (filter == NULL) { - return; - } - - efree((void*)filter); -} - -void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter) -{ - filter->status = 0; - filter->flag = 0; -} - -int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter) -{ - filter->flag = 1; /* bad */ - return c; -} - -void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter) -{ - filter->status = 0; - filter->flag = 1; -} - -int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter) -{ - return c; -} diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h deleted file mode 100644 index c9afd03fb4..0000000000 --- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * "streamable kanji code filter and converter" - * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. - * - * LICENSE NOTICES - * - * This file is part of "streamable kanji code filter and converter", - * which is distributed under the terms of GNU Lesser General Public - * License (version 2) as published by the Free Software Foundation. - * - * This software 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 "streamable kanji code filter and converter"; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, - * Suite 330, Boston, MA 02111-1307 USA - * - * The author of this file: - * - */ -/* - * The source code included in this files was separated from mbfilter.h - * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file - * mbfilter.h is included in this package . - * - */ - -#ifndef MBFL_IDENT_H -#define MBFL_IDENT_H - -#include "mbfl_defs.h" -#include "mbfl_encoding.h" - -/* - * identify filter - */ -typedef struct _mbfl_identify_filter mbfl_identify_filter; - -struct _mbfl_identify_filter { - void (*filter_ctor)(mbfl_identify_filter *filter); - int (*filter_function)(int c, mbfl_identify_filter *filter); - int status; - int flag; - int score; - const mbfl_encoding *encoding; -}; - -struct mbfl_identify_vtbl { - enum mbfl_no_encoding encoding; - void (*filter_ctor)(mbfl_identify_filter *filter); - int (*filter_function)(int c, mbfl_identify_filter *filter); -}; - -MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding); -MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding); -MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new2(const mbfl_encoding *encoding); -MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter); -MBFLAPI extern int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding); -MBFLAPI extern int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding); - -MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter); -MBFLAPI extern void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter); - -MBFLAPI extern int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter); -MBFLAPI extern int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter); - -#endif /* MBFL_IDENT_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c index 09746efcd0..cd064e5ee8 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c @@ -37,106 +37,67 @@ /* * memory device output functions */ -void -mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz) +void mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz) { - if (device) { - device->length = 0; - device->buffer = NULL; - if (initsz > 0) { - device->buffer = emalloc(initsz); - device->length = initsz; - } - device->pos = 0; - if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { - device->allocsz = allocsz; - } else { - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } - } + device->buffer = (initsz > 0) ? emalloc(initsz) : NULL; + device->length = initsz; + device->pos = 0; + device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE); } -void -mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz) +void mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz) { - if (device) { - if (initsz > device->length) { - device->buffer = erealloc(device->buffer, initsz); - device->length = initsz; - } - if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { - device->allocsz = allocsz; - } else { - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } + if (initsz > device->length) { + device->buffer = erealloc(device->buffer, initsz); + device->length = initsz; } + device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE); } -void -mbfl_memory_device_clear(mbfl_memory_device *device) +void mbfl_memory_device_clear(mbfl_memory_device *device) { - if (device) { - if (device->buffer) { - efree(device->buffer); - } - device->buffer = NULL; - device->length = 0; - device->pos = 0; + if (device->buffer) { + efree(device->buffer); } + device->buffer = NULL; + device->length = device->pos = 0; } -void -mbfl_memory_device_reset(mbfl_memory_device *device) +void mbfl_memory_device_reset(mbfl_memory_device *device) { - if (device) { - device->pos = 0; - } + device->pos = 0; } -void -mbfl_memory_device_unput(mbfl_memory_device *device) +void mbfl_memory_device_unput(mbfl_memory_device *device) { if (device->pos > 0) { device->pos--; } } -mbfl_string * -mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) +mbfl_string* mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) { - if (device && result) { - result->len = device->pos; - mbfl_memory_device_output('\0', device); - result->val = device->buffer; - device->buffer = NULL; - device->length = 0; - device->pos= 0; - if (result->val == NULL) { - result->len = 0; - result = NULL; - } - } else { - result = NULL; - } - + result->len = device->pos; + mbfl_memory_device_output('\0', device); + result->val = device->buffer; + device->buffer = NULL; + device->length = device->pos = 0; return result; } -int -mbfl_memory_device_output(int c, void *data) +int mbfl_memory_device_output(int c, void *data) { mbfl_memory_device *device = (mbfl_memory_device *)data; if (device->pos >= device->length) { /* reallocate buffer */ - size_t newlen; if (device->length > SIZE_MAX - device->allocsz) { /* overflow */ return -1; } - newlen = device->length + device->allocsz; + size_t newlen = device->length + device->allocsz; device->buffer = erealloc(device->buffer, newlen); device->length = newlen; } @@ -145,20 +106,15 @@ mbfl_memory_device_output(int c, void *data) return c; } -int -mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) +int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) { return mbfl_memory_device_strncat(device, psrc, strlen(psrc)); } -int -mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len) +int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len) { - unsigned char *w; - if (len > device->length - device->pos) { /* reallocate buffer */ - size_t newlen; if (len > SIZE_MAX - MBFL_MEMORY_DEVICE_ALLOC_SIZE || device->length > SIZE_MAX - (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)) { @@ -166,50 +122,41 @@ mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t return -1; } - newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; + size_t newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; device->buffer = erealloc(device->buffer, newlen); device->length = newlen; } - w = &device->buffer[device->pos]; + unsigned char *w = &device->buffer[device->pos]; memcpy(w, psrc, len); device->pos += len; return 0; } -int -mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) +int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) { - return mbfl_memory_device_strncat(dest, (const char *) src->buffer, src->pos); + return mbfl_memory_device_strncat(dest, (const char*)src->buffer, src->pos); } -void -mbfl_wchar_device_init(mbfl_wchar_device *device) +void mbfl_wchar_device_init(mbfl_wchar_device *device) { - if (device) { - device->buffer = NULL; - device->length = 0; - device->pos= 0; - device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; - } + device->buffer = NULL; + device->length = 0; + device->pos = 0; + device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; } -void -mbfl_wchar_device_clear(mbfl_wchar_device *device) +void mbfl_wchar_device_clear(mbfl_wchar_device *device) { - if (device) { - if (device->buffer) { - efree(device->buffer); - } - device->buffer = NULL; - device->length = 0; - device->pos = 0; + if (device->buffer) { + efree(device->buffer); } + device->buffer = NULL; + device->length = device->pos = 0; } -int -mbfl_wchar_device_output(int c, void *data) +int mbfl_wchar_device_output(int c, void *data) { mbfl_wchar_device *device = (mbfl_wchar_device *)data; @@ -228,11 +175,10 @@ mbfl_wchar_device_output(int c, void *data) return -1; } - device->buffer = erealloc(device->buffer, newlen*sizeof(int)); + device->buffer = erealloc(device->buffer, newlen * sizeof(int)); device->length = newlen; } device->buffer[device->pos++] = c; - return c; } diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h index 7e86db3e06..b8a188ec84 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h @@ -69,6 +69,4 @@ MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device); MBFLAPI extern int mbfl_wchar_device_output(int c, void *data); MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device); - - #endif /* MBFL_MEMORY_DEVICE_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.c b/ext/mbstring/libmbfl/mbfl/mbfl_string.c index a036356dd2..760634e65d 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_string.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_string.c @@ -31,31 +31,22 @@ #include "mbfl_string.h" #include "mbfilter_pass.h" -/* - * string object - */ -void -mbfl_string_init(mbfl_string *string) +void mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding) { - string->encoding = &mbfl_encoding_pass; - string->val = (unsigned char*)NULL; + string->encoding = encoding; + string->val = NULL; string->len = 0; } -void -mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding) +void mbfl_string_init(mbfl_string *string) { - string->encoding = encoding; - string->val = (unsigned char*)NULL; - string->len = 0; + mbfl_string_init_set(string, &mbfl_encoding_pass); } -void -mbfl_string_clear(mbfl_string *string) +void mbfl_string_clear(mbfl_string *string) { - if (string->val != (unsigned char*)NULL) { + if (string->val) { efree(string->val); } - string->val = (unsigned char*)NULL; - string->len = 0; + mbfl_string_init_set(string, NULL); /* Poison it so any attempt to reuse will fail hard */ } diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index b6395aecdd..6d5541f073 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -34,12 +34,12 @@ #include "libmbfl/mbfl/mbfilter_8bit.h" #include "libmbfl/mbfl/mbfilter_pass.h" #include "libmbfl/mbfl/mbfilter_wchar.h" -#include "libmbfl/filters/mbfilter_ascii.h" #include "libmbfl/filters/mbfilter_base64.h" #include "libmbfl/filters/mbfilter_qprint.h" #include "libmbfl/filters/mbfilter_ucs4.h" #include "libmbfl/filters/mbfilter_utf8.h" #include "libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.h" +#include "libmbfl/filters/mbfilter_singlebyte.h" #include "php_variables.h" #include "php_globals.h" @@ -1497,9 +1497,6 @@ PHP_FUNCTION(mb_preferred_mime_name) } /* }}} */ -#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0) -#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0) - /* {{{ Parses GET/POST/COOKIE data and sets global variables */ PHP_FUNCTION(mb_parse_str) { @@ -2764,8 +2761,7 @@ PHP_FUNCTION(mb_encoding_aliases) array_init(return_value); if (encoding->aliases != NULL) { - const char **alias; - for (alias = *encoding->aliases; *alias; ++alias) { + for (const char **alias = encoding->aliases; *alias; ++alias) { add_next_index_string(return_value, (char *)*alias); } } @@ -3649,7 +3645,7 @@ PHP_FUNCTION(mb_send_mail) if (!suppressed_hdrs.cnt_type) { mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER2, sizeof(PHP_MBSTR_MAIL_MIME_HEADER2) - 1); - p = (char *)mbfl_no2preferred_mime_name(tran_cs->no_encoding); + p = (char *)mbfl_encoding_preferred_mime_name(tran_cs); if (p != NULL) { mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER3, sizeof(PHP_MBSTR_MAIL_MIME_HEADER3) - 1); mbfl_memory_device_strcat(&device, p); @@ -3658,7 +3654,7 @@ PHP_FUNCTION(mb_send_mail) } if (!suppressed_hdrs.cnt_trans_enc) { mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER4, sizeof(PHP_MBSTR_MAIL_MIME_HEADER4) - 1); - p = (char *)mbfl_no2preferred_mime_name(body_enc->no_encoding); + p = (char *)mbfl_encoding_preferred_mime_name(body_enc); if (p == NULL) { p = "7bit"; } @@ -3859,70 +3855,43 @@ PHP_FUNCTION(mb_get_info) } /* }}} */ - -static inline mbfl_buffer_converter *php_mb_init_convd(const mbfl_encoding *encoding) +static int mbfl_filt_check_errors(int c, void* data) { - mbfl_buffer_converter *convd; - - convd = mbfl_buffer_converter_new(encoding, encoding, 0); - if (convd == NULL) { - return NULL; + if (c & MBFL_WCSGROUP_THROUGH) { + (*((mbfl_convert_filter**)data))->num_illegalchar++; } - mbfl_buffer_converter_illegal_mode(convd, MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE); - mbfl_buffer_converter_illegal_substchar(convd, 0); - return convd; + return c; } +MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding) +{ + mbfl_convert_filter *filter = mbfl_convert_filter_new(encoding, &mbfl_encoding_wchar, mbfl_filt_check_errors, NULL, &filter); -static inline int php_mb_check_encoding_impl(mbfl_buffer_converter *convd, const char *input, size_t length, const mbfl_encoding *encoding) { - mbfl_string string, result; - - mbfl_string_init_set(&string, encoding); - mbfl_string_init(&result); - - string.val = (unsigned char *) input; - string.len = length; - - mbfl_string *ret = mbfl_buffer_converter_feed_result(convd, &string, &result); - size_t illegalchars = mbfl_buffer_illegalchars(convd); - - if (ret != NULL) { - if (illegalchars == 0 && string.len == result.len && memcmp(string.val, result.val, string.len) == 0) { - mbfl_string_clear(&result); - return 1; + while (length--) { + unsigned char c = *input++; + (filter->filter_function)(c, filter); + if (filter->num_illegalchar) { + mbfl_convert_filter_delete(filter); + return 0; } - mbfl_string_clear(&result); } - return 0; -} - -MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const mbfl_encoding *encoding) -{ - mbfl_buffer_converter *convd = php_mb_init_convd(encoding); - /* If this assertion fails this means some memory allocation failure which is a bug */ - ZEND_ASSERT(convd != NULL); - int result = php_mb_check_encoding_impl(convd, input, length, encoding); - mbfl_buffer_converter_delete(convd); + (filter->filter_flush)(filter); + int result = !filter->num_illegalchar; + mbfl_convert_filter_delete(filter); return result; } static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding *encoding) { - mbfl_buffer_converter *convd; zend_long idx; zend_string *key; zval *entry; int valid = 1; - (void)(idx); - - convd = php_mb_init_convd(encoding); - /* If this assertion fails this means some memory allocation failure which is a bug */ - ZEND_ASSERT(convd != NULL); + (void)(idx); /* Suppress spurious compiler warning that `idx` is not used */ if (GC_IS_RECURSIVE(vars)) { - mbfl_buffer_converter_delete(convd); php_error_docref(NULL, E_WARNING, "Cannot not handle circular references"); return 0; } @@ -3930,14 +3899,14 @@ static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding ZEND_HASH_FOREACH_KEY_VAL(vars, idx, key, entry) { ZVAL_DEREF(entry); if (key) { - if (!php_mb_check_encoding_impl(convd, ZSTR_VAL(key), ZSTR_LEN(key), encoding)) { + if (!php_mb_check_encoding(ZSTR_VAL(key), ZSTR_LEN(key), encoding)) { valid = 0; break; } } switch (Z_TYPE_P(entry)) { case IS_STRING: - if (!php_mb_check_encoding_impl(convd, Z_STRVAL_P(entry), Z_STRLEN_P(entry), encoding)) { + if (!php_mb_check_encoding(Z_STRVAL_P(entry), Z_STRLEN_P(entry), encoding)) { valid = 0; break; } @@ -3961,11 +3930,9 @@ static int php_mb_check_encoding_recursive(HashTable *vars, const mbfl_encoding } } ZEND_HASH_FOREACH_END(); GC_TRY_UNPROTECT_RECURSION(vars); - mbfl_buffer_converter_delete(convd); return valid; } - /* {{{ Check if the string is valid for the specified encoding */ PHP_FUNCTION(mb_check_encoding) { diff --git a/ext/mbstring/tests/armscii8_encoding.phpt b/ext/mbstring/tests/armscii8_encoding.phpt new file mode 100644 index 0000000000..b5bea077d0 --- /dev/null +++ b/ext/mbstring/tests/armscii8_encoding.phpt @@ -0,0 +1,32 @@ +--TEST-- +Exhaustive test of verification and conversion of ARMSCII-8 text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +srand(111); // Make results consistent +mb_substitute_character(0x25); // '%' + +readConversionTable(__DIR__ . '/data/ARMSCII-8.txt', $toUnicode, $fromUnicode); +$irreversible = ["\x28", "\x29", "\x2C", "\x2D", "\x2E"]; + +findInvalidChars($toUnicode, $invalid, $truncated); +testAllValidChars($toUnicode, 'ARMSCII-8', 'UTF-16BE', false); +foreach ($irreversible as $char) + unset($toUnicode[$char]); +testAllValidChars($toUnicode, 'ARMSCII-8', 'UTF-16BE'); +testAllInvalidChars($invalid, $toUnicode, 'ARMSCII-8', 'UTF-16BE', "\x00%"); +testTruncatedChars($truncated, 'ARMSCII-8', 'UTF-16BE', "\x00%"); +echo "Tested ARMSCII-8 -> UTF-16BE\n"; + +findInvalidChars($fromUnicode, $invalid, $unused, array_fill_keys(range(0,0xFF), 2)); +convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', 'ARMSCII-8', '%'); +echo "Tested UTF-16BE -> ARMSCII-8\n"; +?> +--EXPECT-- +Tested ARMSCII-8 -> UTF-16BE +Tested UTF-16BE -> ARMSCII-8 diff --git a/ext/mbstring/tests/bug45722.phpt b/ext/mbstring/tests/bug45722.phpt index 97f6fe5d97..f0649cbb2a 100644 --- a/ext/mbstring/tests/bug45722.phpt +++ b/ext/mbstring/tests/bug45722.phpt @@ -7,4 +7,4 @@ Bug #45722 (mb_check_encoding() crashes) var_dump(mb_check_encoding("&\xc2\xb7 TEST TEST TEST TEST TEST TEST", "HTML-ENTITIES")); ?> --EXPECT-- -bool(false) +bool(true) diff --git a/ext/mbstring/tests/bug47399.phpt b/ext/mbstring/tests/bug47399.phpt deleted file mode 100644 index 3586e5cc72..0000000000 --- a/ext/mbstring/tests/bug47399.phpt +++ /dev/null @@ -1,525 +0,0 @@ ---TEST-- -Bug #47399 (mb_check_encoding() returns true for some illegal SJIS characters) ---SKIPIF-- -<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> ---FILE-- -<?php -foreach (array("Shift_JIS", "CP932") as $enc) { - for ($a = 0; $a < 256; $a++) { - var_dump(mb_check_encoding("\x81".pack("c", $a), $enc)); - } -} -?> ---EXPECT-- -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(false) -bool(false) -bool(false) diff --git a/ext/mbstring/tests/bug62545.phpt b/ext/mbstring/tests/bug62545.phpt deleted file mode 100644 index 49ecc559d8..0000000000 --- a/ext/mbstring/tests/bug62545.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #62545 (wrong unicode mapping in some charsets) ---SKIPIF-- -<?php -if (!extension_loaded('mbstring')) die('skip mbstring extension not available'); -?> ---FILE-- -<?php -var_dump( - bin2hex(mb_convert_encoding("\x98", 'UTF-8', 'Windows-1251')), - bin2hex(mb_convert_encoding("\x81\x8d\x8f\x90\x9d", 'UTF-8', 'Windows-1252')) -); -?> ---EXPECT-- -string(6) "efbfbd" -string(30) "efbfbdefbfbdefbfbdefbfbdefbfbd" diff --git a/ext/mbstring/tests/cp1251_encoding.phpt b/ext/mbstring/tests/cp1251_encoding.phpt new file mode 100644 index 0000000000..c2fa370cf4 --- /dev/null +++ b/ext/mbstring/tests/cp1251_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP1251 text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/CP1251.txt', 'CP1251'); +?> +--EXPECT-- +Tested CP1251 -> UTF-16BE +Tested UTF-16BE -> CP1251 diff --git a/ext/mbstring/tests/cp1252_encoding.phpt b/ext/mbstring/tests/cp1252_encoding.phpt new file mode 100644 index 0000000000..cc2d81fdcd --- /dev/null +++ b/ext/mbstring/tests/cp1252_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP1252 text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/CP1252.txt', 'CP1252'); +?> +--EXPECT-- +Tested CP1252 -> UTF-16BE +Tested UTF-16BE -> CP1252 diff --git a/ext/mbstring/tests/cp1254_encoding.phpt b/ext/mbstring/tests/cp1254_encoding.phpt new file mode 100644 index 0000000000..4d5bbf81ab --- /dev/null +++ b/ext/mbstring/tests/cp1254_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP1254 text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/CP1254.txt', 'CP1254'); +?> +--EXPECT-- +Tested CP1254 -> UTF-16BE +Tested UTF-16BE -> CP1254 diff --git a/ext/mbstring/tests/cp850_encoding.phpt b/ext/mbstring/tests/cp850_encoding.phpt new file mode 100644 index 0000000000..c736da1e14 --- /dev/null +++ b/ext/mbstring/tests/cp850_encoding.phpt @@ -0,0 +1,14 @@ +--TEST-- +Exhaustive test of verification and conversion of CP850 text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/CP850.txt', 'CP850');?> +--EXPECT-- +Tested CP850 -> UTF-16BE +Tested UTF-16BE -> CP850 diff --git a/ext/mbstring/tests/cp866_encoding.phpt b/ext/mbstring/tests/cp866_encoding.phpt new file mode 100644 index 0000000000..774d9e4488 --- /dev/null +++ b/ext/mbstring/tests/cp866_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of CP866 text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/CP866.txt', 'CP866'); +?> +--EXPECT-- +Tested CP866 -> UTF-16BE +Tested UTF-16BE -> CP866 diff --git a/ext/mbstring/tests/data/8859-1.txt b/ext/mbstring/tests/data/8859-1.txt new file mode 100644 index 0000000000..3a55afefc4 --- /dev/null +++ b/ext/mbstring/tests/data/8859-1.txt @@ -0,0 +1,292 @@ +# 8859-1.TXT +# Date: 2015-12-02 20:19:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-1:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-10.txt b/ext/mbstring/tests/data/8859-10.txt new file mode 100644 index 0000000000..0ec67d72ee --- /dev/null +++ b/ext/mbstring/tests/data/8859-10.txt @@ -0,0 +1,292 @@ +# 8859-10.TXT +# Date: 2015-12-02 21:53:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-10:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 October 11 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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 +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-11.txt b/ext/mbstring/tests/data/8859-11.txt new file mode 100644 index 0000000000..5334e3c276 --- /dev/null +++ b/ext/mbstring/tests/data/8859-11.txt @@ -0,0 +1,286 @@ +# 8859-11.TXT +# Date: 2015-12-02 21:55:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-11:2001 to Unicode +# Unicode version: 3.2 +# Table version: 2.0 +# Table format: Format A +# Date: 2002 October 7 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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 +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-13.txt b/ext/mbstring/tests/data/8859-13.txt new file mode 100644 index 0000000000..b613dc00e1 --- /dev/null +++ b/ext/mbstring/tests/data/8859-13.txt @@ -0,0 +1,291 @@ +# 8859-13.TXT +# Date: 2015-12-02 22:03:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-13:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-14.txt b/ext/mbstring/tests/data/8859-14.txt new file mode 100644 index 0000000000..3c3a02466b --- /dev/null +++ b/ext/mbstring/tests/data/8859-14.txt @@ -0,0 +1,292 @@ +# 8859-14.TXT +# Date: 2015-12-02 22:05:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-14:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> +# Ken Whistler <ken@unicode.org> +# +# 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. +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-15.txt b/ext/mbstring/tests/data/8859-15.txt new file mode 100644 index 0000000000..f21a763600 --- /dev/null +++ b/ext/mbstring/tests/data/8859-15.txt @@ -0,0 +1,294 @@ +# 8859-15.TXT +# Date: 2015-12-02 22:06:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-15:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> +# Ken Whistler <ken@unicode.org> +# +# 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 +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-16.txt b/ext/mbstring/tests/data/8859-16.txt new file mode 100644 index 0000000000..4a05225a78 --- /dev/null +++ b/ext/mbstring/tests/data/8859-16.txt @@ -0,0 +1,293 @@ +# 8859-16.TXT +# Date: 2015-12-02 22:08:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-16:2001 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 2001 July 26 (header updated: 2015 December 02) +# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> +# +# Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved. +# +# 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. +# +# Version history +# 1.0 version: created +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-2.txt b/ext/mbstring/tests/data/8859-2.txt new file mode 100644 index 0000000000..20da9ba993 --- /dev/null +++ b/ext/mbstring/tests/data/8859-2.txt @@ -0,0 +1,292 @@ +# 8859-2.TXT +# Date: 2015-12-02 21:34:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-2:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-3.txt b/ext/mbstring/tests/data/8859-3.txt new file mode 100644 index 0000000000..5a6c5de547 --- /dev/null +++ b/ext/mbstring/tests/data/8859-3.txt @@ -0,0 +1,285 @@ +# 8859-3.TXT +# Date: 2015-12-02 21:39:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-3:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-4.txt b/ext/mbstring/tests/data/8859-4.txt new file mode 100644 index 0000000000..e2f5e725fd --- /dev/null +++ b/ext/mbstring/tests/data/8859-4.txt @@ -0,0 +1,292 @@ +# 8859-4.TXT +# Date: 2015-12-02 21:41:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-4:1998 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-5.txt b/ext/mbstring/tests/data/8859-5.txt new file mode 100644 index 0000000000..a574c3feaf --- /dev/null +++ b/ext/mbstring/tests/data/8859-5.txt @@ -0,0 +1,292 @@ +# 8859-5.TXT +# Date: 2015-12-02 21:43:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-5:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/8859-6.txt b/ext/mbstring/tests/data/8859-6.txt new file mode 100644 index 0000000000..fed0af3631 --- /dev/null +++ b/ext/mbstring/tests/data/8859-6.txt @@ -0,0 +1,249 @@ +# 8859-6.TXT +# Date: 2015-12-02 21:44:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-6:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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). +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 +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/ext/mbstring/tests/data/8859-7.txt b/ext/mbstring/tests/data/8859-7.txt new file mode 100644 index 0000000000..49131a4d94 --- /dev/null +++ b/ext/mbstring/tests/data/8859-7.txt @@ -0,0 +1,299 @@ +# 8859-7.TXT +# Date: 2015-12-02 21:47:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO 8859-7:2003 to Unicode +# Unicode version: 4.0 +# Table version: 3.0 +# Table format: Format A +# Date: 2003-Nov-12 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# +# 3.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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/ext/mbstring/tests/data/8859-8.txt b/ext/mbstring/tests/data/8859-8.txt new file mode 100644 index 0000000000..ff068f7083 --- /dev/null +++ b/ext/mbstring/tests/data/8859-8.txt @@ -0,0 +1,258 @@ +# 8859-8.TXT +# Date: 2015-12-02 21:50:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-8:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 2000-Jan-03 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 +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/ext/mbstring/tests/data/8859-9.txt b/ext/mbstring/tests/data/8859-9.txt new file mode 100644 index 0000000000..d0c9ff94e4 --- /dev/null +++ b/ext/mbstring/tests/data/8859-9.txt @@ -0,0 +1,294 @@ +# 8859-9.TXT +# Date: 2015-12-02 21:51:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: ISO/IEC 8859-9:1999 to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 1999 July 27 (header updated: 2015 December 02) +# Authors: Ken Whistler <ken@unicode.org> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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/ext/mbstring/tests/data/ARMSCII-8.txt b/ext/mbstring/tests/data/ARMSCII-8.txt new file mode 100644 index 0000000000..1854fddc13 --- /dev/null +++ b/ext/mbstring/tests/data/ARMSCII-8.txt @@ -0,0 +1,255 @@ +# Derived from armscii-8(7) man page +0x0 0x0 +0x1 0x1 +0x2 0x2 +0x3 0x3 +0x4 0x4 +0x5 0x5 +0x6 0x6 +0x7 0x7 +0x8 0x8 +0x9 0x9 +0xA 0xA +0xB 0xB +0xC 0xC +0xD 0xD +0xE 0xE +0xF 0xF +0x10 0x10 +0x11 0x11 +0x12 0x12 +0x13 0x13 +0x14 0x14 +0x15 0x15 +0x16 0x16 +0x17 0x17 +0x18 0x18 +0x19 0x19 +0x1A 0x1A +0x1B 0x1B +0x1C 0x1C +0x1D 0x1D +0x1E 0x1E +0x1F 0x1F +0x20 0x20 +0x21 0x21 +0x22 0x22 +0x23 0x23 +0x24 0x24 +0x25 0x25 +0x26 0x26 +0x27 0x27 +0x28 0x28 +0x29 0x29 +0x2A 0x2A +0x2B 0x2B +0x2C 0x2C +0x2D 0x2D +0x2E 0x2E +0x2F 0x2F +0x30 0x30 +0x31 0x31 +0x32 0x32 +0x33 0x33 +0x34 0x34 +0x35 0x35 +0x36 0x36 +0x37 0x37 +0x38 0x38 +0x39 0x39 +0x3A 0x3A +0x3B 0x3B +0x3C 0x3C +0x3D 0x3D +0x3E 0x3E +0x3F 0x3F +0x40 0x40 +0x41 0x41 +0x42 0x42 +0x43 0x43 +0x44 0x44 +0x45 0x45 +0x46 0x46 +0x47 0x47 +0x48 0x48 +0x49 0x49 +0x4A 0x4A +0x4B 0x4B +0x4C 0x4C +0x4D 0x4D +0x4E 0x4E +0x4F 0x4F +0x50 0x50 +0x51 0x51 +0x52 0x52 +0x53 0x53 +0x54 0x54 +0x55 0x55 +0x56 0x56 +0x57 0x57 +0x58 0x58 +0x59 0x59 +0x5A 0x5A +0x5B 0x5B +0x5C 0x5C +0x5D 0x5D +0x5E 0x5E +0x5F 0x5F +0x60 0x60 +0x61 0x61 +0x62 0x62 +0x63 0x63 +0x64 0x64 +0x65 0x65 +0x66 0x66 +0x67 0x67 +0x68 0x68 +0x69 0x69 +0x6A 0x6A +0x6B 0x6B +0x6C 0x6C +0x6D 0x6D +0x6E 0x6E +0x6F 0x6F +0x70 0x70 +0x71 0x71 +0x72 0x72 +0x73 0x73 +0x74 0x74 +0x75 0x75 +0x76 0x76 +0x77 0x77 +0x78 0x78 +0x79 0x79 +0x7A 0x7A +0x7B 0x7B +0x7C 0x7C +0x7D 0x7D +0x7E 0x7E +0x7F 0x7F +0x80 0x80 +0x81 0x81 +0x82 0x82 +0x83 0x83 +0x84 0x84 +0x85 0x85 +0x86 0x86 +0x87 0x87 +0x88 0x88 +0x89 0x89 +0x8A 0x8A +0x8B 0x8B +0x8C 0x8C +0x8D 0x8D +0x8E 0x8E +0x8F 0x8F +0x90 0x90 +0x91 0x91 +0x92 0x92 +0x93 0x93 +0x94 0x94 +0x95 0x95 +0x96 0x96 +0x97 0x97 +0x98 0x98 +0x99 0x99 +0x9A 0x9A +0x9B 0x9B +0x9C 0x9C +0x9D 0x9D +0x9E 0x9E +0x9F 0x9F +0xA0 0x00A0 # NO-BREAK SPACE +0xA2 0x0587 # SMALL LIGATURE ECH YIWN +0xA3 0x0589 # ARMENIAN FULL STOP +0xA4 0x0029 # RIGHT PARENTHESIS +0xA5 0x0028 # LEFT PARENTHESIS +0xA6 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xA7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xA8 0x2014 # EM DASH +0xA9 0x002E # FULL STOP +0xAA 0x055D # ARMENIAN COMMA +0xAB 0x002C # COMMA +0xAC 0x002D # HYPHEN-MINUS +0xAD 0x058A # ARMENIAN HYPHEN +0xAE 0x2026 # HORIZONTAL ELLIPSIS +0xAF 0x055C # ARMENIAN EXCLAMATION MARK +0xB0 0x055B # ARMENIAN EMPHASIS MARK +0xB1 0x055E # ARMENIAN QUESTION MARK +0xB2 0x0531 +0xB3 0x0561 +0xB4 0x0532 +0xB5 0x0562 +0xB6 0x0533 +0xB7 0x0563 +0xB8 0x0534 +0xB9 0x0564 +0xBA 0x0535 +0xBB 0x0565 +0xBC 0x0536 +0xBD 0x0566 +0xBE 0x0537 +0xBF 0x0567 +0xC0 0x0538 +0xC1 0x0568 +0xC2 0x0539 +0xC3 0x0569 +0xC4 0x053A +0xC5 0x056A +0xC6 0x053B +0xC7 0x056B +0xC8 0x053C +0xC9 0x056C +0xCA 0x053D +0xCB 0x056D +0xCC 0x053E +0xCD 0x056E +0xCE 0x053F +0xCF 0x056F +0xD0 0x0540 +0xD1 0x0570 +0xD2 0x0541 +0xD3 0x0571 +0xD4 0x0542 +0xD5 0x0572 +0xD6 0x0543 +0xD7 0x0573 +0xD8 0x0544 +0xD9 0x0574 +0xDA 0x0545 +0xDB 0x0575 +0xDC 0x0546 +0xDD 0x0576 +0xDE 0x0547 +0xDF 0x0577 +0xE0 0x0548 +0xE1 0x0578 +0xE2 0x0549 +0xE3 0x0579 +0xE4 0x054A +0xE5 0x057A +0xE6 0x054B +0xE7 0x057B +0xE8 0x054C +0xE9 0x057C +0xEA 0x054D +0xEB 0x057D +0xEC 0x054E +0xED 0x057E +0xEE 0x054F +0xEF 0x057F +0xF0 0x0550 +0xF1 0x0580 +0xF2 0x0551 +0xF3 0x0581 +0xF4 0x0552 +0xF5 0x0582 +0xF6 0x0553 +0xF7 0x0583 +0xF8 0x0554 +0xF9 0x0584 +0xFA 0x0555 +0xFB 0x0585 +0xFC 0x0556 +0xFD 0x0586 +0xFE 0x055A diff --git a/ext/mbstring/tests/data/CP1251.txt b/ext/mbstring/tests/data/CP1251.txt new file mode 100644 index 0000000000..4d9b3558ac --- /dev/null +++ b/ext/mbstring/tests/data/CP1251.txt @@ -0,0 +1,274 @@ +# +# Name: cp1251 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: Shawn.Steele@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/ext/mbstring/tests/data/CP1252.txt b/ext/mbstring/tests/data/CP1252.txt new file mode 100644 index 0000000000..8ff4b204b7 --- /dev/null +++ b/ext/mbstring/tests/data/CP1252.txt @@ -0,0 +1,274 @@ +# +# Name: cp1252 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: Shawn.Steele@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/ext/mbstring/tests/data/CP1254.txt b/ext/mbstring/tests/data/CP1254.txt new file mode 100644 index 0000000000..987ed98f75 --- /dev/null +++ b/ext/mbstring/tests/data/CP1254.txt @@ -0,0 +1,274 @@ +# +# Name: cp1254 to Unicode table +# Unicode version: 2.0 +# Table version: 2.01 +# Table format: Format A +# Date: 04/15/98 +# +# Contact: Shawn.Steele@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/ext/mbstring/tests/data/CP850.txt b/ext/mbstring/tests/data/CP850.txt new file mode 100644 index 0000000000..7f662c49c9 --- /dev/null +++ b/ext/mbstring/tests/data/CP850.txt @@ -0,0 +1,273 @@ +# +# Name: cp850_DOSLatin1 to Unicode table +# Unicode version: 2.0 +# Table version: 2.00 +# Table format: Format A +# Date: 04/24/96 +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp850_DOSLatin1 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 cp850_DOSLatin1 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 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA +0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS +0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE +0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS +0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE +0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE +0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA +0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX +0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS +0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE +0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS +0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX +0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE +0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE +0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE +0x91 0x00e6 #LATIN SMALL LIGATURE AE +0x92 0x00c6 #LATIN CAPITAL LIGATURE AE +0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS +0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE +0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX +0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE +0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS +0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS +0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE +0x9c 0x00a3 #POUND SIGN +0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE +0x9e 0x00d7 #MULTIPLICATION SIGN +0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK +0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE +0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE +0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE +0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE +0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE +0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE +0xa6 0x00aa #FEMININE ORDINAL INDICATOR +0xa7 0x00ba #MASCULINE ORDINAL INDICATOR +0xa8 0x00bf #INVERTED QUESTION MARK +0xa9 0x00ae #REGISTERED SIGN +0xaa 0x00ac #NOT SIGN +0xab 0x00bd #VULGAR FRACTION ONE HALF +0xac 0x00bc #VULGAR FRACTION ONE QUARTER +0xad 0x00a1 #INVERTED EXCLAMATION MARK +0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xb0 0x2591 #LIGHT SHADE +0xb1 0x2592 #MEDIUM SHADE +0xb2 0x2593 #DARK SHADE +0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL +0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT +0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE +0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE +0xb8 0x00a9 #COPYRIGHT SIGN +0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL +0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT +0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT +0xbd 0x00a2 #CENT SIGN +0xbe 0x00a5 #YEN SIGN +0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT +0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT +0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL +0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL +0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE +0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE +0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT +0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL +0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xcf 0x00a4 #CURRENCY SIGN +0xd0 0x00f0 #LATIN SMALL LETTER ETH +0xd1 0x00d0 #LATIN CAPITAL LETTER ETH +0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS +0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE +0xd5 0x0131 #LATIN SMALL LETTER DOTLESS I +0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE +0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS +0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT +0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT +0xdb 0x2588 #FULL BLOCK +0xdc 0x2584 #LOWER HALF BLOCK +0xdd 0x00a6 #BROKEN BAR +0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE +0xdf 0x2580 #UPPER HALF BLOCK +0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE +0xe1 0x00df #LATIN SMALL LETTER SHARP S +0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE +0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE +0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE +0xe6 0x00b5 #MICRO SIGN +0xe7 0x00fe #LATIN SMALL LETTER THORN +0xe8 0x00de #LATIN CAPITAL LETTER THORN +0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE +0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE +0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE +0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE +0xee 0x00af #MACRON +0xef 0x00b4 #ACUTE ACCENT +0xf0 0x00ad #SOFT HYPHEN +0xf1 0x00b1 #PLUS-MINUS SIGN +0xf2 0x2017 #DOUBLE LOW LINE +0xf3 0x00be #VULGAR FRACTION THREE QUARTERS +0xf4 0x00b6 #PILCROW SIGN +0xf5 0x00a7 #SECTION SIGN +0xf6 0x00f7 #DIVISION SIGN +0xf7 0x00b8 #CEDILLA +0xf8 0x00b0 #DEGREE SIGN +0xf9 0x00a8 #DIAERESIS +0xfa 0x00b7 #MIDDLE DOT +0xfb 0x00b9 #SUPERSCRIPT ONE +0xfc 0x00b3 #SUPERSCRIPT THREE +0xfd 0x00b2 #SUPERSCRIPT TWO +0xfe 0x25a0 #BLACK SQUARE +0xff 0x00a0 #NO-BREAK SPACE diff --git a/ext/mbstring/tests/data/CP866.txt b/ext/mbstring/tests/data/CP866.txt new file mode 100644 index 0000000000..64d29ef1fb --- /dev/null +++ b/ext/mbstring/tests/data/CP866.txt @@ -0,0 +1,273 @@ +# +# Name: cp866_DOSCyrillicRussian to Unicode table +# Unicode version: 2.0 +# Table version: 2.00 +# Table format: Format A +# Date: 04/24/96 +# Contact: Shawn.Steele@microsoft.com +# +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp866_DOSCyrillicRussian 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 cp866_DOSCyrillicRussian 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 0x0410 #CYRILLIC CAPITAL LETTER A +0x81 0x0411 #CYRILLIC CAPITAL LETTER BE +0x82 0x0412 #CYRILLIC CAPITAL LETTER VE +0x83 0x0413 #CYRILLIC CAPITAL LETTER GHE +0x84 0x0414 #CYRILLIC CAPITAL LETTER DE +0x85 0x0415 #CYRILLIC CAPITAL LETTER IE +0x86 0x0416 #CYRILLIC CAPITAL LETTER ZHE +0x87 0x0417 #CYRILLIC CAPITAL LETTER ZE +0x88 0x0418 #CYRILLIC CAPITAL LETTER I +0x89 0x0419 #CYRILLIC CAPITAL LETTER SHORT I +0x8a 0x041a #CYRILLIC CAPITAL LETTER KA +0x8b 0x041b #CYRILLIC CAPITAL LETTER EL +0x8c 0x041c #CYRILLIC CAPITAL LETTER EM +0x8d 0x041d #CYRILLIC CAPITAL LETTER EN +0x8e 0x041e #CYRILLIC CAPITAL LETTER O +0x8f 0x041f #CYRILLIC CAPITAL LETTER PE +0x90 0x0420 #CYRILLIC CAPITAL LETTER ER +0x91 0x0421 #CYRILLIC CAPITAL LETTER ES +0x92 0x0422 #CYRILLIC CAPITAL LETTER TE +0x93 0x0423 #CYRILLIC CAPITAL LETTER U +0x94 0x0424 #CYRILLIC CAPITAL LETTER EF +0x95 0x0425 #CYRILLIC CAPITAL LETTER HA +0x96 0x0426 #CYRILLIC CAPITAL LETTER TSE +0x97 0x0427 #CYRILLIC CAPITAL LETTER CHE +0x98 0x0428 #CYRILLIC CAPITAL LETTER SHA +0x99 0x0429 #CYRILLIC CAPITAL LETTER SHCHA +0x9a 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN +0x9b 0x042b #CYRILLIC CAPITAL LETTER YERU +0x9c 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN +0x9d 0x042d #CYRILLIC CAPITAL LETTER E +0x9e 0x042e #CYRILLIC CAPITAL LETTER YU +0x9f 0x042f #CYRILLIC CAPITAL LETTER YA +0xa0 0x0430 #CYRILLIC SMALL LETTER A +0xa1 0x0431 #CYRILLIC SMALL LETTER BE +0xa2 0x0432 #CYRILLIC SMALL LETTER VE +0xa3 0x0433 #CYRILLIC SMALL LETTER GHE +0xa4 0x0434 #CYRILLIC SMALL LETTER DE +0xa5 0x0435 #CYRILLIC SMALL LETTER IE +0xa6 0x0436 #CYRILLIC SMALL LETTER ZHE +0xa7 0x0437 #CYRILLIC SMALL LETTER ZE +0xa8 0x0438 #CYRILLIC SMALL LETTER I +0xa9 0x0439 #CYRILLIC SMALL LETTER SHORT I +0xaa 0x043a #CYRILLIC SMALL LETTER KA +0xab 0x043b #CYRILLIC SMALL LETTER EL +0xac 0x043c #CYRILLIC SMALL LETTER EM +0xad 0x043d #CYRILLIC SMALL LETTER EN +0xae 0x043e #CYRILLIC SMALL LETTER O +0xaf 0x043f #CYRILLIC SMALL LETTER PE +0xb0 0x2591 #LIGHT SHADE +0xb1 0x2592 #MEDIUM SHADE +0xb2 0x2593 #DARK SHADE +0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL +0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT +0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL +0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT +0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT +0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT +0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT +0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL +0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL +0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT +0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL +0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT +0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT +0xdb 0x2588 #FULL BLOCK +0xdc 0x2584 #LOWER HALF BLOCK +0xdd 0x258c #LEFT HALF BLOCK +0xde 0x2590 #RIGHT HALF BLOCK +0xdf 0x2580 #UPPER HALF BLOCK +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 0x0401 #CYRILLIC CAPITAL LETTER IO +0xf1 0x0451 #CYRILLIC SMALL LETTER IO +0xf2 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xf3 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE +0xf4 0x0407 #CYRILLIC CAPITAL LETTER YI +0xf5 0x0457 #CYRILLIC SMALL LETTER YI +0xf6 0x040e #CYRILLIC CAPITAL LETTER SHORT U +0xf7 0x045e #CYRILLIC SMALL LETTER SHORT U +0xf8 0x00b0 #DEGREE SIGN +0xf9 0x2219 #BULLET OPERATOR +0xfa 0x00b7 #MIDDLE DOT +0xfb 0x221a #SQUARE ROOT +0xfc 0x2116 #NUMERO SIGN +0xfd 0x00a4 #CURRENCY SIGN +0xfe 0x25a0 #BLACK SQUARE +0xff 0x00a0 #NO-BREAK SPACE diff --git a/ext/mbstring/tests/data/EUC-JP.txt b/ext/mbstring/tests/data/EUC-JP.txt new file mode 100644 index 0000000000..8a56f460b1 --- /dev/null +++ b/ext/mbstring/tests/data/EUC-JP.txt @@ -0,0 +1,13137 @@ +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0A 0x000A +0x0B 0x000B +0x0C 0x000C +0x0D 0x000D +0x0E 0x000E +0x0F 0x000F +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1A 0x001A +0x1B 0x001B +0x1C 0x001C +0x1D 0x001D +0x1E 0x001E +0x1F 0x001F +0x20 0x0020 +0x21 0x0021 +0x22 0x0022 +0x23 0x0023 +0x24 0x0024 +0x25 0x0025 +0x26 0x0026 +0x27 0x0027 +0x28 0x0028 +0x29 0x0029 +0x2A 0x002A +0x2B 0x002B +0x2C 0x002C +0x2D 0x002D +0x2E 0x002E +0x2F 0x002F +0x30 0x0030 +0x31 0x0031 +0x32 0x0032 +0x33 0x0033 +0x34 0x0034 +0x35 0x0035 +0x36 0x0036 +0x37 0x0037 +0x38 0x0038 +0x39 0x0039 +0x3A 0x003A +0x3B 0x003B +0x3C 0x003C +0x3D 0x003D +0x3E 0x003E +0x3F 0x003F +0x40 0x0040 +0x41 0x0041 +0x42 0x0042 +0x43 0x0043 +0x44 0x0044 +0x45 0x0045 +0x46 0x0046 +0x47 0x0047 +0x48 0x0048 +0x49 0x0049 +0x4A 0x004A +0x4B 0x004B +0x4C 0x004C +0x4D 0x004D +0x4E 0x004E +0x4F 0x004F +0x50 0x0050 +0x51 0x0051 +0x52 0x0052 +0x53 0x0053 +0x54 0x0054 +0x55 0x0055 +0x56 0x0056 +0x57 0x0057 +0x58 0x0058 +0x59 0x0059 +0x5A 0x005A +0x5B 0x005B +0x5C 0x005C +0x5D 0x005D +0x5E 0x005E +0x5F 0x005F +0x60 0x0060 +0x61 0x0061 +0x62 0x0062 +0x63 0x0063 +0x64 0x0064 +0x65 0x0065 +0x66 0x0066 +0x67 0x0067 +0x68 0x0068 +0x69 0x0069 +0x6A 0x006A +0x6B 0x006B +0x6C 0x006C +0x6D 0x006D +0x6E 0x006E +0x6F 0x006F +0x70 0x0070 +0x71 0x0071 +0x72 0x0072 +0x73 0x0073 +0x74 0x0074 +0x75 0x0075 +0x76 0x0076 +0x77 0x0077 +0x78 0x0078 +0x79 0x0079 +0x7A 0x007A +0x7B 0x007B +0x7C 0x007C +0x7D 0x007D +0x7E 0x007E +0x7F 0x007F +0x8EA1 0xFF61 +0x8EA2 0xFF62 +0x8EA3 0xFF63 +0x8EA4 0xFF64 +0x8EA5 0xFF65 +0x8EA6 0xFF66 +0x8EA7 0xFF67 +0x8EA8 0xFF68 +0x8EA9 0xFF69 +0x8EAA 0xFF6A +0x8EAB 0xFF6B +0x8EAC 0xFF6C +0x8EAD 0xFF6D +0x8EAE 0xFF6E +0x8EAF 0xFF6F +0x8EB0 0xFF70 +0x8EB1 0xFF71 +0x8EB2 0xFF72 +0x8EB3 0xFF73 +0x8EB4 0xFF74 +0x8EB5 0xFF75 +0x8EB6 0xFF76 +0x8EB7 0xFF77 +0x8EB8 0xFF78 +0x8EB9 0xFF79 +0x8EBA 0xFF7A +0x8EBB 0xFF7B +0x8EBC 0xFF7C +0x8EBD 0xFF7D +0x8EBE 0xFF7E +0x8EBF 0xFF7F +0x8EC0 0xFF80 +0x8EC1 0xFF81 +0x8EC2 0xFF82 +0x8EC3 0xFF83 +0x8EC4 0xFF84 +0x8EC5 0xFF85 +0x8EC6 0xFF86 +0x8EC7 0xFF87 +0x8EC8 0xFF88 +0x8EC9 0xFF89 +0x8ECA 0xFF8A +0x8ECB 0xFF8B +0x8ECC 0xFF8C +0x8ECD 0xFF8D +0x8ECE 0xFF8E +0x8ECF 0xFF8F +0x8ED0 0xFF90 +0x8ED1 0xFF91 +0x8ED2 0xFF92 +0x8ED3 0xFF93 +0x8ED4 0xFF94 +0x8ED5 0xFF95 +0x8ED6 0xFF96 +0x8ED7 0xFF97 +0x8ED8 0xFF98 +0x8ED9 0xFF99 +0x8EDA 0xFF9A +0x8EDB 0xFF9B +0x8EDC 0xFF9C +0x8EDD 0xFF9D +0x8EDE 0xFF9E +0x8EDF 0xFF9F +0x8FA2AF 0x02D8 +0x8FA2B0 0x02C7 +0x8FA2B1 0x00B8 +0x8FA2B2 0x02D9 +0x8FA2B3 0x02DD +0x8FA2B4 0x00AF +0x8FA2B5 0x02DB +0x8FA2B6 0x02DA +0x8FA2B7 0x007E +0x8FA2B8 0x0384 +0x8FA2B9 0x0385 +0x8FA2C2 0x00A1 +0x8FA2C3 0x00A6 +0x8FA2C4 0x00BF +0x8FA2EB 0x00BA +0x8FA2EC 0x00AA +0x8FA2ED 0x00A9 +0x8FA2EE 0x00AE +0x8FA2EF 0x2122 +0x8FA2F0 0x00A4 +0x8FA2F1 0x2116 +0x8FA6E1 0x0386 +0x8FA6E2 0x0388 +0x8FA6E3 0x0389 +0x8FA6E4 0x038A +0x8FA6E5 0x03AA +0x8FA6E7 0x038C +0x8FA6E9 0x038E +0x8FA6EA 0x03AB +0x8FA6EC 0x038F +0x8FA6F1 0x03AC +0x8FA6F2 0x03AD +0x8FA6F3 0x03AE +0x8FA6F4 0x03AF +0x8FA6F5 0x03CA +0x8FA6F6 0x0390 +0x8FA6F7 0x03CC +0x8FA6F8 0x03C2 +0x8FA6F9 0x03CD +0x8FA6FA 0x03CB +0x8FA6FB 0x03B0 +0x8FA6FC 0x03CE +0x8FA7C2 0x0402 +0x8FA7C3 0x0403 +0x8FA7C4 0x0404 +0x8FA7C5 0x0405 +0x8FA7C6 0x0406 +0x8FA7C7 0x0407 +0x8FA7C8 0x0408 +0x8FA7C9 0x0409 +0x8FA7CA 0x040A +0x8FA7CB 0x040B +0x8FA7CC 0x040C +0x8FA7CD 0x040E +0x8FA7CE 0x040F +0x8FA7F2 0x0452 +0x8FA7F3 0x0453 +0x8FA7F4 0x0454 +0x8FA7F5 0x0455 +0x8FA7F6 0x0456 +0x8FA7F7 0x0457 +0x8FA7F8 0x0458 +0x8FA7F9 0x0459 +0x8FA7FA 0x045A +0x8FA7FB 0x045B +0x8FA7FC 0x045C +0x8FA7FD 0x045E +0x8FA7FE 0x045F +0x8FA9A1 0x00C6 +0x8FA9A2 0x0110 +0x8FA9A4 0x0126 +0x8FA9A6 0x0132 +0x8FA9A8 0x0141 +0x8FA9A9 0x013F +0x8FA9AB 0x014A +0x8FA9AC 0x00D8 +0x8FA9AD 0x0152 +0x8FA9AF 0x0166 +0x8FA9B0 0x00DE +0x8FA9C1 0x00E6 +0x8FA9C2 0x0111 +0x8FA9C3 0x00F0 +0x8FA9C4 0x0127 +0x8FA9C5 0x0131 +0x8FA9C6 0x0133 +0x8FA9C7 0x0138 +0x8FA9C8 0x0142 +0x8FA9C9 0x0140 +0x8FA9CA 0x0149 +0x8FA9CB 0x014B +0x8FA9CC 0x00F8 +0x8FA9CD 0x0153 +0x8FA9CE 0x00DF +0x8FA9CF 0x0167 +0x8FA9D0 0x00FE +0x8FAAA1 0x00C1 +0x8FAAA2 0x00C0 +0x8FAAA3 0x00C4 +0x8FAAA4 0x00C2 +0x8FAAA5 0x0102 +0x8FAAA6 0x01CD +0x8FAAA7 0x0100 +0x8FAAA8 0x0104 +0x8FAAA9 0x00C5 +0x8FAAAA 0x00C3 +0x8FAAAB 0x0106 +0x8FAAAC 0x0108 +0x8FAAAD 0x010C +0x8FAAAE 0x00C7 +0x8FAAAF 0x010A +0x8FAAB0 0x010E +0x8FAAB1 0x00C9 +0x8FAAB2 0x00C8 +0x8FAAB3 0x00CB +0x8FAAB4 0x00CA +0x8FAAB5 0x011A +0x8FAAB6 0x0116 +0x8FAAB7 0x0112 +0x8FAAB8 0x0118 +0x8FAABA 0x011C +0x8FAABB 0x011E +0x8FAABC 0x0122 +0x8FAABD 0x0120 +0x8FAABE 0x0124 +0x8FAABF 0x00CD +0x8FAAC0 0x00CC +0x8FAAC1 0x00CF +0x8FAAC2 0x00CE +0x8FAAC3 0x01CF +0x8FAAC4 0x0130 +0x8FAAC5 0x012A +0x8FAAC6 0x012E +0x8FAAC7 0x0128 +0x8FAAC8 0x0134 +0x8FAAC9 0x0136 +0x8FAACA 0x0139 +0x8FAACB 0x013D +0x8FAACC 0x013B +0x8FAACD 0x0143 +0x8FAACE 0x0147 +0x8FAACF 0x0145 +0x8FAAD0 0x00D1 +0x8FAAD1 0x00D3 +0x8FAAD2 0x00D2 +0x8FAAD3 0x00D6 +0x8FAAD4 0x00D4 +0x8FAAD5 0x01D1 +0x8FAAD6 0x0150 +0x8FAAD7 0x014C +0x8FAAD8 0x00D5 +0x8FAAD9 0x0154 +0x8FAADA 0x0158 +0x8FAADB 0x0156 +0x8FAADC 0x015A +0x8FAADD 0x015C +0x8FAADE 0x0160 +0x8FAADF 0x015E +0x8FAAE0 0x0164 +0x8FAAE1 0x0162 +0x8FAAE2 0x00DA +0x8FAAE3 0x00D9 +0x8FAAE4 0x00DC +0x8FAAE5 0x00DB +0x8FAAE6 0x016C +0x8FAAE7 0x01D3 +0x8FAAE8 0x0170 +0x8FAAE9 0x016A +0x8FAAEA 0x0172 +0x8FAAEB 0x016E +0x8FAAEC 0x0168 +0x8FAAED 0x01D7 +0x8FAAEE 0x01DB +0x8FAAEF 0x01D9 +0x8FAAF0 0x01D5 +0x8FAAF1 0x0174 +0x8FAAF2 0x00DD +0x8FAAF3 0x0178 +0x8FAAF4 0x0176 +0x8FAAF5 0x0179 +0x8FAAF6 0x017D +0x8FAAF7 0x017B +0x8FABA1 0x00E1 +0x8FABA2 0x00E0 +0x8FABA3 0x00E4 +0x8FABA4 0x00E2 +0x8FABA5 0x0103 +0x8FABA6 0x01CE +0x8FABA7 0x0101 +0x8FABA8 0x0105 +0x8FABA9 0x00E5 +0x8FABAA 0x00E3 +0x8FABAB 0x0107 +0x8FABAC 0x0109 +0x8FABAD 0x010D +0x8FABAE 0x00E7 +0x8FABAF 0x010B +0x8FABB0 0x010F +0x8FABB1 0x00E9 +0x8FABB2 0x00E8 +0x8FABB3 0x00EB +0x8FABB4 0x00EA +0x8FABB5 0x011B +0x8FABB6 0x0117 +0x8FABB7 0x0113 +0x8FABB8 0x0119 +0x8FABB9 0x01F5 +0x8FABBA 0x011D +0x8FABBB 0x011F +0x8FABBD 0x0121 +0x8FABBE 0x0125 +0x8FABBF 0x00ED +0x8FABC0 0x00EC +0x8FABC1 0x00EF +0x8FABC2 0x00EE +0x8FABC3 0x01D0 +0x8FABC5 0x012B +0x8FABC6 0x012F +0x8FABC7 0x0129 +0x8FABC8 0x0135 +0x8FABC9 0x0137 +0x8FABCA 0x013A +0x8FABCB 0x013E +0x8FABCC 0x013C +0x8FABCD 0x0144 +0x8FABCE 0x0148 +0x8FABCF 0x0146 +0x8FABD0 0x00F1 +0x8FABD1 0x00F3 +0x8FABD2 0x00F2 +0x8FABD3 0x00F6 +0x8FABD4 0x00F4 +0x8FABD5 0x01D2 +0x8FABD6 0x0151 +0x8FABD7 0x014D +0x8FABD8 0x00F5 +0x8FABD9 0x0155 +0x8FABDA 0x0159 +0x8FABDB 0x0157 +0x8FABDC 0x015B +0x8FABDD 0x015D +0x8FABDE 0x0161 +0x8FABDF 0x015F +0x8FABE0 0x0165 +0x8FABE1 0x0163 +0x8FABE2 0x00FA +0x8FABE3 0x00F9 +0x8FABE4 0x00FC +0x8FABE5 0x00FB +0x8FABE6 0x016D +0x8FABE7 0x01D4 +0x8FABE8 0x0171 +0x8FABE9 0x016B +0x8FABEA 0x0173 +0x8FABEB 0x016F +0x8FABEC 0x0169 +0x8FABED 0x01D8 +0x8FABEE 0x01DC +0x8FABEF 0x01DA +0x8FABF0 0x01D6 +0x8FABF1 0x0175 +0x8FABF2 0x00FD +0x8FABF3 0x00FF +0x8FABF4 0x0177 +0x8FABF5 0x017A +0x8FABF6 0x017E +0x8FABF7 0x017C +0x8FB0A1 0x4E02 +0x8FB0A2 0x4E04 +0x8FB0A3 0x4E05 +0x8FB0A4 0x4E0C +0x8FB0A5 0x4E12 +0x8FB0A6 0x4E1F +0x8FB0A7 0x4E23 +0x8FB0A8 0x4E24 +0x8FB0A9 0x4E28 +0x8FB0AA 0x4E2B +0x8FB0AB 0x4E2E +0x8FB0AC 0x4E2F +0x8FB0AD 0x4E30 +0x8FB0AE 0x4E35 +0x8FB0AF 0x4E40 +0x8FB0B0 0x4E41 +0x8FB0B1 0x4E44 +0x8FB0B2 0x4E47 +0x8FB0B3 0x4E51 +0x8FB0B4 0x4E5A +0x8FB0B5 0x4E5C +0x8FB0B6 0x4E63 +0x8FB0B7 0x4E68 +0x8FB0B8 0x4E69 +0x8FB0B9 0x4E74 +0x8FB0BA 0x4E75 +0x8FB0BB 0x4E79 +0x8FB0BC 0x4E7F +0x8FB0BD 0x4E8D +0x8FB0BE 0x4E96 +0x8FB0BF 0x4E97 +0x8FB0C0 0x4E9D +0x8FB0C1 0x4EAF +0x8FB0C2 0x4EB9 +0x8FB0C3 0x4EC3 +0x8FB0C4 0x4ED0 +0x8FB0C5 0x4EDA +0x8FB0C6 0x4EDB +0x8FB0C7 0x4EE0 +0x8FB0C8 0x4EE1 +0x8FB0C9 0x4EE2 +0x8FB0CA 0x4EE8 +0x8FB0CB 0x4EEF +0x8FB0CC 0x4EF1 +0x8FB0CD 0x4EF3 +0x8FB0CE 0x4EF5 +0x8FB0CF 0x4EFD +0x8FB0D0 0x4EFE +0x8FB0D1 0x4EFF +0x8FB0D2 0x4F00 +0x8FB0D3 0x4F02 +0x8FB0D4 0x4F03 +0x8FB0D5 0x4F08 +0x8FB0D6 0x4F0B +0x8FB0D7 0x4F0C +0x8FB0D8 0x4F12 +0x8FB0D9 0x4F15 +0x8FB0DA 0x4F16 +0x8FB0DB 0x4F17 +0x8FB0DC 0x4F19 +0x8FB0DD 0x4F2E +0x8FB0DE 0x4F31 +0x8FB0DF 0x4F60 +0x8FB0E0 0x4F33 +0x8FB0E1 0x4F35 +0x8FB0E2 0x4F37 +0x8FB0E3 0x4F39 +0x8FB0E4 0x4F3B +0x8FB0E5 0x4F3E +0x8FB0E6 0x4F40 +0x8FB0E7 0x4F42 +0x8FB0E8 0x4F48 +0x8FB0E9 0x4F49 +0x8FB0EA 0x4F4B +0x8FB0EB 0x4F4C +0x8FB0EC 0x4F52 +0x8FB0ED 0x4F54 +0x8FB0EE 0x4F56 +0x8FB0EF 0x4F58 +0x8FB0F0 0x4F5F +0x8FB0F1 0x4F63 +0x8FB0F2 0x4F6A +0x8FB0F3 0x4F6C +0x8FB0F4 0x4F6E +0x8FB0F5 0x4F71 +0x8FB0F6 0x4F77 +0x8FB0F7 0x4F78 +0x8FB0F8 0x4F79 +0x8FB0F9 0x4F7A +0x8FB0FA 0x4F7D +0x8FB0FB 0x4F7E +0x8FB0FC 0x4F81 +0x8FB0FD 0x4F82 +0x8FB0FE 0x4F84 +0x8FB1A1 0x4F85 +0x8FB1A2 0x4F89 +0x8FB1A3 0x4F8A +0x8FB1A4 0x4F8C +0x8FB1A5 0x4F8E +0x8FB1A6 0x4F90 +0x8FB1A7 0x4F92 +0x8FB1A8 0x4F93 +0x8FB1A9 0x4F94 +0x8FB1AA 0x4F97 +0x8FB1AB 0x4F99 +0x8FB1AC 0x4F9A +0x8FB1AD 0x4F9E +0x8FB1AE 0x4F9F +0x8FB1AF 0x4FB2 +0x8FB1B0 0x4FB7 +0x8FB1B1 0x4FB9 +0x8FB1B2 0x4FBB +0x8FB1B3 0x4FBC +0x8FB1B4 0x4FBD +0x8FB1B5 0x4FBE +0x8FB1B6 0x4FC0 +0x8FB1B7 0x4FC1 +0x8FB1B8 0x4FC5 +0x8FB1B9 0x4FC6 +0x8FB1BA 0x4FC8 +0x8FB1BB 0x4FC9 +0x8FB1BC 0x4FCB +0x8FB1BD 0x4FCC +0x8FB1BE 0x4FCD +0x8FB1BF 0x4FCF +0x8FB1C0 0x4FD2 +0x8FB1C1 0x4FDC +0x8FB1C2 0x4FE0 +0x8FB1C3 0x4FE2 +0x8FB1C4 0x4FF0 +0x8FB1C5 0x4FF2 +0x8FB1C6 0x4FFC +0x8FB1C7 0x4FFD +0x8FB1C8 0x4FFF +0x8FB1C9 0x5000 +0x8FB1CA 0x5001 +0x8FB1CB 0x5004 +0x8FB1CC 0x5007 +0x8FB1CD 0x500A +0x8FB1CE 0x500C +0x8FB1CF 0x500E +0x8FB1D0 0x5010 +0x8FB1D1 0x5013 +0x8FB1D2 0x5017 +0x8FB1D3 0x5018 +0x8FB1D4 0x501B +0x8FB1D5 0x501C +0x8FB1D6 0x501D +0x8FB1D7 0x501E +0x8FB1D8 0x5022 +0x8FB1D9 0x5027 +0x8FB1DA 0x502E +0x8FB1DB 0x5030 +0x8FB1DC 0x5032 +0x8FB1DD 0x5033 +0x8FB1DE 0x5035 +0x8FB1DF 0x5040 +0x8FB1E0 0x5041 +0x8FB1E1 0x5042 +0x8FB1E2 0x5045 +0x8FB1E3 0x5046 +0x8FB1E4 0x504A +0x8FB1E5 0x504C +0x8FB1E6 0x504E +0x8FB1E7 0x5051 +0x8FB1E8 0x5052 +0x8FB1E9 0x5053 +0x8FB1EA 0x5057 +0x8FB1EB 0x5059 +0x8FB1EC 0x505F +0x8FB1ED 0x5060 +0x8FB1EE 0x5062 +0x8FB1EF 0x5063 +0x8FB1F0 0x5066 +0x8FB1F1 0x5067 +0x8FB1F2 0x506A +0x8FB1F3 0x506D +0x8FB1F4 0x5070 +0x8FB1F5 0x5071 +0x8FB1F6 0x503B +0x8FB1F7 0x5081 +0x8FB1F8 0x5083 +0x8FB1F9 0x5084 +0x8FB1FA 0x5086 +0x8FB1FB 0x508A +0x8FB1FC 0x508E +0x8FB1FD 0x508F +0x8FB1FE 0x5090 +0x8FB2A1 0x5092 +0x8FB2A2 0x5093 +0x8FB2A3 0x5094 +0x8FB2A4 0x5096 +0x8FB2A5 0x509B +0x8FB2A6 0x509C +0x8FB2A7 0x509E +0x8FB2A8 0x509F +0x8FB2A9 0x50A0 +0x8FB2AA 0x50A1 +0x8FB2AB 0x50A2 +0x8FB2AC 0x50AA +0x8FB2AD 0x50AF +0x8FB2AE 0x50B0 +0x8FB2AF 0x50B9 +0x8FB2B0 0x50BA +0x8FB2B1 0x50BD +0x8FB2B2 0x50C0 +0x8FB2B3 0x50C3 +0x8FB2B4 0x50C4 +0x8FB2B5 0x50C7 +0x8FB2B6 0x50CC +0x8FB2B7 0x50CE +0x8FB2B8 0x50D0 +0x8FB2B9 0x50D3 +0x8FB2BA 0x50D4 +0x8FB2BB 0x50D8 +0x8FB2BC 0x50DC +0x8FB2BD 0x50DD +0x8FB2BE 0x50DF +0x8FB2BF 0x50E2 +0x8FB2C0 0x50E4 +0x8FB2C1 0x50E6 +0x8FB2C2 0x50E8 +0x8FB2C3 0x50E9 +0x8FB2C4 0x50EF +0x8FB2C5 0x50F1 +0x8FB2C6 0x50F6 +0x8FB2C7 0x50FA +0x8FB2C8 0x50FE +0x8FB2C9 0x5103 +0x8FB2CA 0x5106 +0x8FB2CB 0x5107 +0x8FB2CC 0x5108 +0x8FB2CD 0x510B +0x8FB2CE 0x510C +0x8FB2CF 0x510D +0x8FB2D0 0x510E +0x8FB2D1 0x50F2 +0x8FB2D2 0x5110 +0x8FB2D3 0x5117 +0x8FB2D4 0x5119 +0x8FB2D5 0x511B +0x8FB2D6 0x511C +0x8FB2D7 0x511D +0x8FB2D8 0x511E +0x8FB2D9 0x5123 +0x8FB2DA 0x5127 +0x8FB2DB 0x5128 +0x8FB2DC 0x512C +0x8FB2DD 0x512D +0x8FB2DE 0x512F +0x8FB2DF 0x5131 +0x8FB2E0 0x5133 +0x8FB2E1 0x5134 +0x8FB2E2 0x5135 +0x8FB2E3 0x5138 +0x8FB2E4 0x5139 +0x8FB2E5 0x5142 +0x8FB2E6 0x514A +0x8FB2E7 0x514F +0x8FB2E8 0x5153 +0x8FB2E9 0x5155 +0x8FB2EA 0x5157 +0x8FB2EB 0x5158 +0x8FB2EC 0x515F +0x8FB2ED 0x5164 +0x8FB2EE 0x5166 +0x8FB2EF 0x517E +0x8FB2F0 0x5183 +0x8FB2F1 0x5184 +0x8FB2F2 0x518B +0x8FB2F3 0x518E +0x8FB2F4 0x5198 +0x8FB2F5 0x519D +0x8FB2F6 0x51A1 +0x8FB2F7 0x51A3 +0x8FB2F8 0x51AD +0x8FB2F9 0x51B8 +0x8FB2FA 0x51BA +0x8FB2FB 0x51BC +0x8FB2FC 0x51BE +0x8FB2FD 0x51BF +0x8FB2FE 0x51C2 +0x8FB3A1 0x51C8 +0x8FB3A2 0x51CF +0x8FB3A3 0x51D1 +0x8FB3A4 0x51D2 +0x8FB3A5 0x51D3 +0x8FB3A6 0x51D5 +0x8FB3A7 0x51D8 +0x8FB3A8 0x51DE +0x8FB3A9 0x51E2 +0x8FB3AA 0x51E5 +0x8FB3AB 0x51EE +0x8FB3AC 0x51F2 +0x8FB3AD 0x51F3 +0x8FB3AE 0x51F4 +0x8FB3AF 0x51F7 +0x8FB3B0 0x5201 +0x8FB3B1 0x5202 +0x8FB3B2 0x5205 +0x8FB3B3 0x5212 +0x8FB3B4 0x5213 +0x8FB3B5 0x5215 +0x8FB3B6 0x5216 +0x8FB3B7 0x5218 +0x8FB3B8 0x5222 +0x8FB3B9 0x5228 +0x8FB3BA 0x5231 +0x8FB3BB 0x5232 +0x8FB3BC 0x5235 +0x8FB3BD 0x523C +0x8FB3BE 0x5245 +0x8FB3BF 0x5249 +0x8FB3C0 0x5255 +0x8FB3C1 0x5257 +0x8FB3C2 0x5258 +0x8FB3C3 0x525A +0x8FB3C4 0x525C +0x8FB3C5 0x525F +0x8FB3C6 0x5260 +0x8FB3C7 0x5261 +0x8FB3C8 0x5266 +0x8FB3C9 0x526E +0x8FB3CA 0x5277 +0x8FB3CB 0x5278 +0x8FB3CC 0x5279 +0x8FB3CD 0x5280 +0x8FB3CE 0x5282 +0x8FB3CF 0x5285 +0x8FB3D0 0x528A +0x8FB3D1 0x528C +0x8FB3D2 0x5293 +0x8FB3D3 0x5295 +0x8FB3D4 0x5296 +0x8FB3D5 0x5297 +0x8FB3D6 0x5298 +0x8FB3D7 0x529A +0x8FB3D8 0x529C +0x8FB3D9 0x52A4 +0x8FB3DA 0x52A5 +0x8FB3DB 0x52A6 +0x8FB3DC 0x52A7 +0x8FB3DD 0x52AF +0x8FB3DE 0x52B0 +0x8FB3DF 0x52B6 +0x8FB3E0 0x52B7 +0x8FB3E1 0x52B8 +0x8FB3E2 0x52BA +0x8FB3E3 0x52BB +0x8FB3E4 0x52BD +0x8FB3E5 0x52C0 +0x8FB3E6 0x52C4 +0x8FB3E7 0x52C6 +0x8FB3E8 0x52C8 +0x8FB3E9 0x52CC +0x8FB3EA 0x52CF +0x8FB3EB 0x52D1 +0x8FB3EC 0x52D4 +0x8FB3ED 0x52D6 +0x8FB3EE 0x52DB +0x8FB3EF 0x52DC +0x8FB3F0 0x52E1 +0x8FB3F1 0x52E5 +0x8FB3F2 0x52E8 +0x8FB3F3 0x52E9 +0x8FB3F4 0x52EA +0x8FB3F5 0x52EC +0x8FB3F6 0x52F0 +0x8FB3F7 0x52F1 +0x8FB3F8 0x52F4 +0x8FB3F9 0x52F6 +0x8FB3FA 0x52F7 +0x8FB3FB 0x5300 +0x8FB3FC 0x5303 +0x8FB3FD 0x530A +0x8FB3FE 0x530B +0x8FB4A1 0x530C +0x8FB4A2 0x5311 +0x8FB4A3 0x5313 +0x8FB4A4 0x5318 +0x8FB4A5 0x531B +0x8FB4A6 0x531C +0x8FB4A7 0x531E +0x8FB4A8 0x531F +0x8FB4A9 0x5325 +0x8FB4AA 0x5327 +0x8FB4AB 0x5328 +0x8FB4AC 0x5329 +0x8FB4AD 0x532B +0x8FB4AE 0x532C +0x8FB4AF 0x532D +0x8FB4B0 0x5330 +0x8FB4B1 0x5332 +0x8FB4B2 0x5335 +0x8FB4B3 0x533C +0x8FB4B4 0x533D +0x8FB4B5 0x533E +0x8FB4B6 0x5342 +0x8FB4B7 0x534C +0x8FB4B8 0x534B +0x8FB4B9 0x5359 +0x8FB4BA 0x535B +0x8FB4BB 0x5361 +0x8FB4BC 0x5363 +0x8FB4BD 0x5365 +0x8FB4BE 0x536C +0x8FB4BF 0x536D +0x8FB4C0 0x5372 +0x8FB4C1 0x5379 +0x8FB4C2 0x537E +0x8FB4C3 0x5383 +0x8FB4C4 0x5387 +0x8FB4C5 0x5388 +0x8FB4C6 0x538E +0x8FB4C7 0x5393 +0x8FB4C8 0x5394 +0x8FB4C9 0x5399 +0x8FB4CA 0x539D +0x8FB4CB 0x53A1 +0x8FB4CC 0x53A4 +0x8FB4CD 0x53AA +0x8FB4CE 0x53AB +0x8FB4CF 0x53AF +0x8FB4D0 0x53B2 +0x8FB4D1 0x53B4 +0x8FB4D2 0x53B5 +0x8FB4D3 0x53B7 +0x8FB4D4 0x53B8 +0x8FB4D5 0x53BA +0x8FB4D6 0x53BD +0x8FB4D7 0x53C0 +0x8FB4D8 0x53C5 +0x8FB4D9 0x53CF +0x8FB4DA 0x53D2 +0x8FB4DB 0x53D3 +0x8FB4DC 0x53D5 +0x8FB4DD 0x53DA +0x8FB4DE 0x53DD +0x8FB4DF 0x53DE +0x8FB4E0 0x53E0 +0x8FB4E1 0x53E6 +0x8FB4E2 0x53E7 +0x8FB4E3 0x53F5 +0x8FB4E4 0x5402 +0x8FB4E5 0x5413 +0x8FB4E6 0x541A +0x8FB4E7 0x5421 +0x8FB4E8 0x5427 +0x8FB4E9 0x5428 +0x8FB4EA 0x542A +0x8FB4EB 0x542F +0x8FB4EC 0x5431 +0x8FB4ED 0x5434 +0x8FB4EE 0x5435 +0x8FB4EF 0x5443 +0x8FB4F0 0x5444 +0x8FB4F1 0x5447 +0x8FB4F2 0x544D +0x8FB4F3 0x544F +0x8FB4F4 0x545E +0x8FB4F5 0x5462 +0x8FB4F6 0x5464 +0x8FB4F7 0x5466 +0x8FB4F8 0x5467 +0x8FB4F9 0x5469 +0x8FB4FA 0x546B +0x8FB4FB 0x546D +0x8FB4FC 0x546E +0x8FB4FD 0x5474 +0x8FB4FE 0x547F +0x8FB5A1 0x5481 +0x8FB5A2 0x5483 +0x8FB5A3 0x5485 +0x8FB5A4 0x5488 +0x8FB5A5 0x5489 +0x8FB5A6 0x548D +0x8FB5A7 0x5491 +0x8FB5A8 0x5495 +0x8FB5A9 0x5496 +0x8FB5AA 0x549C +0x8FB5AB 0x549F +0x8FB5AC 0x54A1 +0x8FB5AD 0x54A6 +0x8FB5AE 0x54A7 +0x8FB5AF 0x54A9 +0x8FB5B0 0x54AA +0x8FB5B1 0x54AD +0x8FB5B2 0x54AE +0x8FB5B3 0x54B1 +0x8FB5B4 0x54B7 +0x8FB5B5 0x54B9 +0x8FB5B6 0x54BA +0x8FB5B7 0x54BB +0x8FB5B8 0x54BF +0x8FB5B9 0x54C6 +0x8FB5BA 0x54CA +0x8FB5BB 0x54CD +0x8FB5BC 0x54CE +0x8FB5BD 0x54E0 +0x8FB5BE 0x54EA +0x8FB5BF 0x54EC +0x8FB5C0 0x54EF +0x8FB5C1 0x54F6 +0x8FB5C2 0x54FC +0x8FB5C3 0x54FE +0x8FB5C4 0x54FF +0x8FB5C5 0x5500 +0x8FB5C6 0x5501 +0x8FB5C7 0x5505 +0x8FB5C8 0x5508 +0x8FB5C9 0x5509 +0x8FB5CA 0x550C +0x8FB5CB 0x550D +0x8FB5CC 0x550E +0x8FB5CD 0x5515 +0x8FB5CE 0x552A +0x8FB5CF 0x552B +0x8FB5D0 0x5532 +0x8FB5D1 0x5535 +0x8FB5D2 0x5536 +0x8FB5D3 0x553B +0x8FB5D4 0x553C +0x8FB5D5 0x553D +0x8FB5D6 0x5541 +0x8FB5D7 0x5547 +0x8FB5D8 0x5549 +0x8FB5D9 0x554A +0x8FB5DA 0x554D +0x8FB5DB 0x5550 +0x8FB5DC 0x5551 +0x8FB5DD 0x5558 +0x8FB5DE 0x555A +0x8FB5DF 0x555B +0x8FB5E0 0x555E +0x8FB5E1 0x5560 +0x8FB5E2 0x5561 +0x8FB5E3 0x5564 +0x8FB5E4 0x5566 +0x8FB5E5 0x557F +0x8FB5E6 0x5581 +0x8FB5E7 0x5582 +0x8FB5E8 0x5586 +0x8FB5E9 0x5588 +0x8FB5EA 0x558E +0x8FB5EB 0x558F +0x8FB5EC 0x5591 +0x8FB5ED 0x5592 +0x8FB5EE 0x5593 +0x8FB5EF 0x5594 +0x8FB5F0 0x5597 +0x8FB5F1 0x55A3 +0x8FB5F2 0x55A4 +0x8FB5F3 0x55AD +0x8FB5F4 0x55B2 +0x8FB5F5 0x55BF +0x8FB5F6 0x55C1 +0x8FB5F7 0x55C3 +0x8FB5F8 0x55C6 +0x8FB5F9 0x55C9 +0x8FB5FA 0x55CB +0x8FB5FB 0x55CC +0x8FB5FC 0x55CE +0x8FB5FD 0x55D1 +0x8FB5FE 0x55D2 +0x8FB6A1 0x55D3 +0x8FB6A2 0x55D7 +0x8FB6A3 0x55D8 +0x8FB6A4 0x55DB +0x8FB6A5 0x55DE +0x8FB6A6 0x55E2 +0x8FB6A7 0x55E9 +0x8FB6A8 0x55F6 +0x8FB6A9 0x55FF +0x8FB6AA 0x5605 +0x8FB6AB 0x5608 +0x8FB6AC 0x560A +0x8FB6AD 0x560D +0x8FB6AE 0x560E +0x8FB6AF 0x560F +0x8FB6B0 0x5610 +0x8FB6B1 0x5611 +0x8FB6B2 0x5612 +0x8FB6B3 0x5619 +0x8FB6B4 0x562C +0x8FB6B5 0x5630 +0x8FB6B6 0x5633 +0x8FB6B7 0x5635 +0x8FB6B8 0x5637 +0x8FB6B9 0x5639 +0x8FB6BA 0x563B +0x8FB6BB 0x563C +0x8FB6BC 0x563D +0x8FB6BD 0x563F +0x8FB6BE 0x5640 +0x8FB6BF 0x5641 +0x8FB6C0 0x5643 +0x8FB6C1 0x5644 +0x8FB6C2 0x5646 +0x8FB6C3 0x5649 +0x8FB6C4 0x564B +0x8FB6C5 0x564D +0x8FB6C6 0x564F +0x8FB6C7 0x5654 +0x8FB6C8 0x565E +0x8FB6C9 0x5660 +0x8FB6CA 0x5661 +0x8FB6CB 0x5662 +0x8FB6CC 0x5663 +0x8FB6CD 0x5666 +0x8FB6CE 0x5669 +0x8FB6CF 0x566D +0x8FB6D0 0x566F +0x8FB6D1 0x5671 +0x8FB6D2 0x5672 +0x8FB6D3 0x5675 +0x8FB6D4 0x5684 +0x8FB6D5 0x5685 +0x8FB6D6 0x5688 +0x8FB6D7 0x568B +0x8FB6D8 0x568C +0x8FB6D9 0x5695 +0x8FB6DA 0x5699 +0x8FB6DB 0x569A +0x8FB6DC 0x569D +0x8FB6DD 0x569E +0x8FB6DE 0x569F +0x8FB6DF 0x56A6 +0x8FB6E0 0x56A7 +0x8FB6E1 0x56A8 +0x8FB6E2 0x56A9 +0x8FB6E3 0x56AB +0x8FB6E4 0x56AC +0x8FB6E5 0x56AD +0x8FB6E6 0x56B1 +0x8FB6E7 0x56B3 +0x8FB6E8 0x56B7 +0x8FB6E9 0x56BE +0x8FB6EA 0x56C5 +0x8FB6EB 0x56C9 +0x8FB6EC 0x56CA +0x8FB6ED 0x56CB +0x8FB6EE 0x56CF +0x8FB6EF 0x56D0 +0x8FB6F0 0x56CC +0x8FB6F1 0x56CD +0x8FB6F2 0x56D9 +0x8FB6F3 0x56DC +0x8FB6F4 0x56DD +0x8FB6F5 0x56DF +0x8FB6F6 0x56E1 +0x8FB6F7 0x56E4 +0x8FB6F8 0x56E5 +0x8FB6F9 0x56E6 +0x8FB6FA 0x56E7 +0x8FB6FB 0x56E8 +0x8FB6FC 0x56F1 +0x8FB6FD 0x56EB +0x8FB6FE 0x56ED +0x8FB7A1 0x56F6 +0x8FB7A2 0x56F7 +0x8FB7A3 0x5701 +0x8FB7A4 0x5702 +0x8FB7A5 0x5707 +0x8FB7A6 0x570A +0x8FB7A7 0x570C +0x8FB7A8 0x5711 +0x8FB7A9 0x5715 +0x8FB7AA 0x571A +0x8FB7AB 0x571B +0x8FB7AC 0x571D +0x8FB7AD 0x5720 +0x8FB7AE 0x5722 +0x8FB7AF 0x5723 +0x8FB7B0 0x5724 +0x8FB7B1 0x5725 +0x8FB7B2 0x5729 +0x8FB7B3 0x572A +0x8FB7B4 0x572C +0x8FB7B5 0x572E +0x8FB7B6 0x572F +0x8FB7B7 0x5733 +0x8FB7B8 0x5734 +0x8FB7B9 0x573D +0x8FB7BA 0x573E +0x8FB7BB 0x573F +0x8FB7BC 0x5745 +0x8FB7BD 0x5746 +0x8FB7BE 0x574C +0x8FB7BF 0x574D +0x8FB7C0 0x5752 +0x8FB7C1 0x5762 +0x8FB7C2 0x5765 +0x8FB7C3 0x5767 +0x8FB7C4 0x5768 +0x8FB7C5 0x576B +0x8FB7C6 0x576D +0x8FB7C7 0x576E +0x8FB7C8 0x576F +0x8FB7C9 0x5770 +0x8FB7CA 0x5771 +0x8FB7CB 0x5773 +0x8FB7CC 0x5774 +0x8FB7CD 0x5775 +0x8FB7CE 0x5777 +0x8FB7CF 0x5779 +0x8FB7D0 0x577A +0x8FB7D1 0x577B +0x8FB7D2 0x577C +0x8FB7D3 0x577E +0x8FB7D4 0x5781 +0x8FB7D5 0x5783 +0x8FB7D6 0x578C +0x8FB7D7 0x5794 +0x8FB7D8 0x5797 +0x8FB7D9 0x5799 +0x8FB7DA 0x579A +0x8FB7DB 0x579C +0x8FB7DC 0x579D +0x8FB7DD 0x579E +0x8FB7DE 0x579F +0x8FB7DF 0x57A1 +0x8FB7E0 0x5795 +0x8FB7E1 0x57A7 +0x8FB7E2 0x57A8 +0x8FB7E3 0x57A9 +0x8FB7E4 0x57AC +0x8FB7E5 0x57B8 +0x8FB7E6 0x57BD +0x8FB7E7 0x57C7 +0x8FB7E8 0x57C8 +0x8FB7E9 0x57CC +0x8FB7EA 0x57CF +0x8FB7EB 0x57D5 +0x8FB7EC 0x57DD +0x8FB7ED 0x57DE +0x8FB7EE 0x57E4 +0x8FB7EF 0x57E6 +0x8FB7F0 0x57E7 +0x8FB7F1 0x57E9 +0x8FB7F2 0x57ED +0x8FB7F3 0x57F0 +0x8FB7F4 0x57F5 +0x8FB7F5 0x57F6 +0x8FB7F6 0x57F8 +0x8FB7F7 0x57FD +0x8FB7F8 0x57FE +0x8FB7F9 0x57FF +0x8FB7FA 0x5803 +0x8FB7FB 0x5804 +0x8FB7FC 0x5808 +0x8FB7FD 0x5809 +0x8FB7FE 0x57E1 +0x8FB8A1 0x580C +0x8FB8A2 0x580D +0x8FB8A3 0x581B +0x8FB8A4 0x581E +0x8FB8A5 0x581F +0x8FB8A6 0x5820 +0x8FB8A7 0x5826 +0x8FB8A8 0x5827 +0x8FB8A9 0x582D +0x8FB8AA 0x5832 +0x8FB8AB 0x5839 +0x8FB8AC 0x583F +0x8FB8AD 0x5849 +0x8FB8AE 0x584C +0x8FB8AF 0x584D +0x8FB8B0 0x584F +0x8FB8B1 0x5850 +0x8FB8B2 0x5855 +0x8FB8B3 0x585F +0x8FB8B4 0x5861 +0x8FB8B5 0x5864 +0x8FB8B6 0x5867 +0x8FB8B7 0x5868 +0x8FB8B8 0x5878 +0x8FB8B9 0x587C +0x8FB8BA 0x587F +0x8FB8BB 0x5880 +0x8FB8BC 0x5881 +0x8FB8BD 0x5887 +0x8FB8BE 0x5888 +0x8FB8BF 0x5889 +0x8FB8C0 0x588A +0x8FB8C1 0x588C +0x8FB8C2 0x588D +0x8FB8C3 0x588F +0x8FB8C4 0x5890 +0x8FB8C5 0x5894 +0x8FB8C6 0x5896 +0x8FB8C7 0x589D +0x8FB8C8 0x58A0 +0x8FB8C9 0x58A1 +0x8FB8CA 0x58A2 +0x8FB8CB 0x58A6 +0x8FB8CC 0x58A9 +0x8FB8CD 0x58B1 +0x8FB8CE 0x58B2 +0x8FB8CF 0x58C4 +0x8FB8D0 0x58BC +0x8FB8D1 0x58C2 +0x8FB8D2 0x58C8 +0x8FB8D3 0x58CD +0x8FB8D4 0x58CE +0x8FB8D5 0x58D0 +0x8FB8D6 0x58D2 +0x8FB8D7 0x58D4 +0x8FB8D8 0x58D6 +0x8FB8D9 0x58DA +0x8FB8DA 0x58DD +0x8FB8DB 0x58E1 +0x8FB8DC 0x58E2 +0x8FB8DD 0x58E9 +0x8FB8DE 0x58F3 +0x8FB8DF 0x5905 +0x8FB8E0 0x5906 +0x8FB8E1 0x590B +0x8FB8E2 0x590C +0x8FB8E3 0x5912 +0x8FB8E4 0x5913 +0x8FB8E5 0x5914 +0x8FB8E6 0x8641 +0x8FB8E7 0x591D +0x8FB8E8 0x5921 +0x8FB8E9 0x5923 +0x8FB8EA 0x5924 +0x8FB8EB 0x5928 +0x8FB8EC 0x592F +0x8FB8ED 0x5930 +0x8FB8EE 0x5933 +0x8FB8EF 0x5935 +0x8FB8F0 0x5936 +0x8FB8F1 0x593F +0x8FB8F2 0x5943 +0x8FB8F3 0x5946 +0x8FB8F4 0x5952 +0x8FB8F5 0x5953 +0x8FB8F6 0x5959 +0x8FB8F7 0x595B +0x8FB8F8 0x595D +0x8FB8F9 0x595E +0x8FB8FA 0x595F +0x8FB8FB 0x5961 +0x8FB8FC 0x5963 +0x8FB8FD 0x596B +0x8FB8FE 0x596D +0x8FB9A1 0x596F +0x8FB9A2 0x5972 +0x8FB9A3 0x5975 +0x8FB9A4 0x5976 +0x8FB9A5 0x5979 +0x8FB9A6 0x597B +0x8FB9A7 0x597C +0x8FB9A8 0x598B +0x8FB9A9 0x598C +0x8FB9AA 0x598E +0x8FB9AB 0x5992 +0x8FB9AC 0x5995 +0x8FB9AD 0x5997 +0x8FB9AE 0x599F +0x8FB9AF 0x59A4 +0x8FB9B0 0x59A7 +0x8FB9B1 0x59AD +0x8FB9B2 0x59AE +0x8FB9B3 0x59AF +0x8FB9B4 0x59B0 +0x8FB9B5 0x59B3 +0x8FB9B6 0x59B7 +0x8FB9B7 0x59BA +0x8FB9B8 0x59BC +0x8FB9B9 0x59C1 +0x8FB9BA 0x59C3 +0x8FB9BB 0x59C4 +0x8FB9BC 0x59C8 +0x8FB9BD 0x59CA +0x8FB9BE 0x59CD +0x8FB9BF 0x59D2 +0x8FB9C0 0x59DD +0x8FB9C1 0x59DE +0x8FB9C2 0x59DF +0x8FB9C3 0x59E3 +0x8FB9C4 0x59E4 +0x8FB9C5 0x59E7 +0x8FB9C6 0x59EE +0x8FB9C7 0x59EF +0x8FB9C8 0x59F1 +0x8FB9C9 0x59F2 +0x8FB9CA 0x59F4 +0x8FB9CB 0x59F7 +0x8FB9CC 0x5A00 +0x8FB9CD 0x5A04 +0x8FB9CE 0x5A0C +0x8FB9CF 0x5A0D +0x8FB9D0 0x5A0E +0x8FB9D1 0x5A12 +0x8FB9D2 0x5A13 +0x8FB9D3 0x5A1E +0x8FB9D4 0x5A23 +0x8FB9D5 0x5A24 +0x8FB9D6 0x5A27 +0x8FB9D7 0x5A28 +0x8FB9D8 0x5A2A +0x8FB9D9 0x5A2D +0x8FB9DA 0x5A30 +0x8FB9DB 0x5A44 +0x8FB9DC 0x5A45 +0x8FB9DD 0x5A47 +0x8FB9DE 0x5A48 +0x8FB9DF 0x5A4C +0x8FB9E0 0x5A50 +0x8FB9E1 0x5A55 +0x8FB9E2 0x5A5E +0x8FB9E3 0x5A63 +0x8FB9E4 0x5A65 +0x8FB9E5 0x5A67 +0x8FB9E6 0x5A6D +0x8FB9E7 0x5A77 +0x8FB9E8 0x5A7A +0x8FB9E9 0x5A7B +0x8FB9EA 0x5A7E +0x8FB9EB 0x5A8B +0x8FB9EC 0x5A90 +0x8FB9ED 0x5A93 +0x8FB9EE 0x5A96 +0x8FB9EF 0x5A99 +0x8FB9F0 0x5A9C +0x8FB9F1 0x5A9E +0x8FB9F2 0x5A9F +0x8FB9F3 0x5AA0 +0x8FB9F4 0x5AA2 +0x8FB9F5 0x5AA7 +0x8FB9F6 0x5AAC +0x8FB9F7 0x5AB1 +0x8FB9F8 0x5AB2 +0x8FB9F9 0x5AB3 +0x8FB9FA 0x5AB5 +0x8FB9FB 0x5AB8 +0x8FB9FC 0x5ABA +0x8FB9FD 0x5ABB +0x8FB9FE 0x5ABF +0x8FBAA1 0x5AC4 +0x8FBAA2 0x5AC6 +0x8FBAA3 0x5AC8 +0x8FBAA4 0x5ACF +0x8FBAA5 0x5ADA +0x8FBAA6 0x5ADC +0x8FBAA7 0x5AE0 +0x8FBAA8 0x5AE5 +0x8FBAA9 0x5AEA +0x8FBAAA 0x5AEE +0x8FBAAB 0x5AF5 +0x8FBAAC 0x5AF6 +0x8FBAAD 0x5AFD +0x8FBAAE 0x5B00 +0x8FBAAF 0x5B01 +0x8FBAB0 0x5B08 +0x8FBAB1 0x5B17 +0x8FBAB2 0x5B34 +0x8FBAB3 0x5B19 +0x8FBAB4 0x5B1B +0x8FBAB5 0x5B1D +0x8FBAB6 0x5B21 +0x8FBAB7 0x5B25 +0x8FBAB8 0x5B2D +0x8FBAB9 0x5B38 +0x8FBABA 0x5B41 +0x8FBABB 0x5B4B +0x8FBABC 0x5B4C +0x8FBABD 0x5B52 +0x8FBABE 0x5B56 +0x8FBABF 0x5B5E +0x8FBAC0 0x5B68 +0x8FBAC1 0x5B6E +0x8FBAC2 0x5B6F +0x8FBAC3 0x5B7C +0x8FBAC4 0x5B7D +0x8FBAC5 0x5B7E +0x8FBAC6 0x5B7F +0x8FBAC7 0x5B81 +0x8FBAC8 0x5B84 +0x8FBAC9 0x5B86 +0x8FBACA 0x5B8A +0x8FBACB 0x5B8E +0x8FBACC 0x5B90 +0x8FBACD 0x5B91 +0x8FBACE 0x5B93 +0x8FBACF 0x5B94 +0x8FBAD0 0x5B96 +0x8FBAD1 0x5BA8 +0x8FBAD2 0x5BA9 +0x8FBAD3 0x5BAC +0x8FBAD4 0x5BAD +0x8FBAD5 0x5BAF +0x8FBAD6 0x5BB1 +0x8FBAD7 0x5BB2 +0x8FBAD8 0x5BB7 +0x8FBAD9 0x5BBA +0x8FBADA 0x5BBC +0x8FBADB 0x5BC0 +0x8FBADC 0x5BC1 +0x8FBADD 0x5BCD +0x8FBADE 0x5BCF +0x8FBADF 0x5BD6 +0x8FBAE0 0x5BD7 +0x8FBAE1 0x5BD8 +0x8FBAE2 0x5BD9 +0x8FBAE3 0x5BDA +0x8FBAE4 0x5BE0 +0x8FBAE5 0x5BEF +0x8FBAE6 0x5BF1 +0x8FBAE7 0x5BF4 +0x8FBAE8 0x5BFD +0x8FBAE9 0x5C0C +0x8FBAEA 0x5C17 +0x8FBAEB 0x5C1E +0x8FBAEC 0x5C1F +0x8FBAED 0x5C23 +0x8FBAEE 0x5C26 +0x8FBAEF 0x5C29 +0x8FBAF0 0x5C2B +0x8FBAF1 0x5C2C +0x8FBAF2 0x5C2E +0x8FBAF3 0x5C30 +0x8FBAF4 0x5C32 +0x8FBAF5 0x5C35 +0x8FBAF6 0x5C36 +0x8FBAF7 0x5C59 +0x8FBAF8 0x5C5A +0x8FBAF9 0x5C5C +0x8FBAFA 0x5C62 +0x8FBAFB 0x5C63 +0x8FBAFC 0x5C67 +0x8FBAFD 0x5C68 +0x8FBAFE 0x5C69 +0x8FBBA1 0x5C6D +0x8FBBA2 0x5C70 +0x8FBBA3 0x5C74 +0x8FBBA4 0x5C75 +0x8FBBA5 0x5C7A +0x8FBBA6 0x5C7B +0x8FBBA7 0x5C7C +0x8FBBA8 0x5C7D +0x8FBBA9 0x5C87 +0x8FBBAA 0x5C88 +0x8FBBAB 0x5C8A +0x8FBBAC 0x5C8F +0x8FBBAD 0x5C92 +0x8FBBAE 0x5C9D +0x8FBBAF 0x5C9F +0x8FBBB0 0x5CA0 +0x8FBBB1 0x5CA2 +0x8FBBB2 0x5CA3 +0x8FBBB3 0x5CA6 +0x8FBBB4 0x5CAA +0x8FBBB5 0x5CB2 +0x8FBBB6 0x5CB4 +0x8FBBB7 0x5CB5 +0x8FBBB8 0x5CBA +0x8FBBB9 0x5CC9 +0x8FBBBA 0x5CCB +0x8FBBBB 0x5CD2 +0x8FBBBC 0x5CDD +0x8FBBBD 0x5CD7 +0x8FBBBE 0x5CEE +0x8FBBBF 0x5CF1 +0x8FBBC0 0x5CF2 +0x8FBBC1 0x5CF4 +0x8FBBC2 0x5D01 +0x8FBBC3 0x5D06 +0x8FBBC4 0x5D0D +0x8FBBC5 0x5D12 +0x8FBBC6 0x5D2B +0x8FBBC7 0x5D23 +0x8FBBC8 0x5D24 +0x8FBBC9 0x5D26 +0x8FBBCA 0x5D27 +0x8FBBCB 0x5D31 +0x8FBBCC 0x5D34 +0x8FBBCD 0x5D39 +0x8FBBCE 0x5D3D +0x8FBBCF 0x5D3F +0x8FBBD0 0x5D42 +0x8FBBD1 0x5D43 +0x8FBBD2 0x5D46 +0x8FBBD3 0x5D48 +0x8FBBD4 0x5D55 +0x8FBBD5 0x5D51 +0x8FBBD6 0x5D59 +0x8FBBD7 0x5D4A +0x8FBBD8 0x5D5F +0x8FBBD9 0x5D60 +0x8FBBDA 0x5D61 +0x8FBBDB 0x5D62 +0x8FBBDC 0x5D64 +0x8FBBDD 0x5D6A +0x8FBBDE 0x5D6D +0x8FBBDF 0x5D70 +0x8FBBE0 0x5D79 +0x8FBBE1 0x5D7A +0x8FBBE2 0x5D7E +0x8FBBE3 0x5D7F +0x8FBBE4 0x5D81 +0x8FBBE5 0x5D83 +0x8FBBE6 0x5D88 +0x8FBBE7 0x5D8A +0x8FBBE8 0x5D92 +0x8FBBE9 0x5D93 +0x8FBBEA 0x5D94 +0x8FBBEB 0x5D95 +0x8FBBEC 0x5D99 +0x8FBBED 0x5D9B +0x8FBBEE 0x5D9F +0x8FBBEF 0x5DA0 +0x8FBBF0 0x5DA7 +0x8FBBF1 0x5DAB +0x8FBBF2 0x5DB0 +0x8FBBF3 0x5DB4 +0x8FBBF4 0x5DB8 +0x8FBBF5 0x5DB9 +0x8FBBF6 0x5DC3 +0x8FBBF7 0x5DC7 +0x8FBBF8 0x5DCB +0x8FBBF9 0x5DD0 +0x8FBBFA 0x5DCE +0x8FBBFB 0x5DD8 +0x8FBBFC 0x5DD9 +0x8FBBFD 0x5DE0 +0x8FBBFE 0x5DE4 +0x8FBCA1 0x5DE9 +0x8FBCA2 0x5DF8 +0x8FBCA3 0x5DF9 +0x8FBCA4 0x5E00 +0x8FBCA5 0x5E07 +0x8FBCA6 0x5E0D +0x8FBCA7 0x5E12 +0x8FBCA8 0x5E14 +0x8FBCA9 0x5E15 +0x8FBCAA 0x5E18 +0x8FBCAB 0x5E1F +0x8FBCAC 0x5E20 +0x8FBCAD 0x5E2E +0x8FBCAE 0x5E28 +0x8FBCAF 0x5E32 +0x8FBCB0 0x5E35 +0x8FBCB1 0x5E3E +0x8FBCB2 0x5E4B +0x8FBCB3 0x5E50 +0x8FBCB4 0x5E49 +0x8FBCB5 0x5E51 +0x8FBCB6 0x5E56 +0x8FBCB7 0x5E58 +0x8FBCB8 0x5E5B +0x8FBCB9 0x5E5C +0x8FBCBA 0x5E5E +0x8FBCBB 0x5E68 +0x8FBCBC 0x5E6A +0x8FBCBD 0x5E6B +0x8FBCBE 0x5E6C +0x8FBCBF 0x5E6D +0x8FBCC0 0x5E6E +0x8FBCC1 0x5E70 +0x8FBCC2 0x5E80 +0x8FBCC3 0x5E8B +0x8FBCC4 0x5E8E +0x8FBCC5 0x5EA2 +0x8FBCC6 0x5EA4 +0x8FBCC7 0x5EA5 +0x8FBCC8 0x5EA8 +0x8FBCC9 0x5EAA +0x8FBCCA 0x5EAC +0x8FBCCB 0x5EB1 +0x8FBCCC 0x5EB3 +0x8FBCCD 0x5EBD +0x8FBCCE 0x5EBE +0x8FBCCF 0x5EBF +0x8FBCD0 0x5EC6 +0x8FBCD1 0x5ECC +0x8FBCD2 0x5ECB +0x8FBCD3 0x5ECE +0x8FBCD4 0x5ED1 +0x8FBCD5 0x5ED2 +0x8FBCD6 0x5ED4 +0x8FBCD7 0x5ED5 +0x8FBCD8 0x5EDC +0x8FBCD9 0x5EDE +0x8FBCDA 0x5EE5 +0x8FBCDB 0x5EEB +0x8FBCDC 0x5F02 +0x8FBCDD 0x5F06 +0x8FBCDE 0x5F07 +0x8FBCDF 0x5F08 +0x8FBCE0 0x5F0E +0x8FBCE1 0x5F19 +0x8FBCE2 0x5F1C +0x8FBCE3 0x5F1D +0x8FBCE4 0x5F21 +0x8FBCE5 0x5F22 +0x8FBCE6 0x5F23 +0x8FBCE7 0x5F24 +0x8FBCE8 0x5F28 +0x8FBCE9 0x5F2B +0x8FBCEA 0x5F2C +0x8FBCEB 0x5F2E +0x8FBCEC 0x5F30 +0x8FBCED 0x5F34 +0x8FBCEE 0x5F36 +0x8FBCEF 0x5F3B +0x8FBCF0 0x5F3D +0x8FBCF1 0x5F3F +0x8FBCF2 0x5F40 +0x8FBCF3 0x5F44 +0x8FBCF4 0x5F45 +0x8FBCF5 0x5F47 +0x8FBCF6 0x5F4D +0x8FBCF7 0x5F50 +0x8FBCF8 0x5F54 +0x8FBCF9 0x5F58 +0x8FBCFA 0x5F5B +0x8FBCFB 0x5F60 +0x8FBCFC 0x5F63 +0x8FBCFD 0x5F64 +0x8FBCFE 0x5F67 +0x8FBDA1 0x5F6F +0x8FBDA2 0x5F72 +0x8FBDA3 0x5F74 +0x8FBDA4 0x5F75 +0x8FBDA5 0x5F78 +0x8FBDA6 0x5F7A +0x8FBDA7 0x5F7D +0x8FBDA8 0x5F7E +0x8FBDA9 0x5F89 +0x8FBDAA 0x5F8D +0x8FBDAB 0x5F8F +0x8FBDAC 0x5F96 +0x8FBDAD 0x5F9C +0x8FBDAE 0x5F9D +0x8FBDAF 0x5FA2 +0x8FBDB0 0x5FA7 +0x8FBDB1 0x5FAB +0x8FBDB2 0x5FA4 +0x8FBDB3 0x5FAC +0x8FBDB4 0x5FAF +0x8FBDB5 0x5FB0 +0x8FBDB6 0x5FB1 +0x8FBDB7 0x5FB8 +0x8FBDB8 0x5FC4 +0x8FBDB9 0x5FC7 +0x8FBDBA 0x5FC8 +0x8FBDBB 0x5FC9 +0x8FBDBC 0x5FCB +0x8FBDBD 0x5FD0 +0x8FBDBE 0x5FD1 +0x8FBDBF 0x5FD2 +0x8FBDC0 0x5FD3 +0x8FBDC1 0x5FD4 +0x8FBDC2 0x5FDE +0x8FBDC3 0x5FE1 +0x8FBDC4 0x5FE2 +0x8FBDC5 0x5FE8 +0x8FBDC6 0x5FE9 +0x8FBDC7 0x5FEA +0x8FBDC8 0x5FEC +0x8FBDC9 0x5FED +0x8FBDCA 0x5FEE +0x8FBDCB 0x5FEF +0x8FBDCC 0x5FF2 +0x8FBDCD 0x5FF3 +0x8FBDCE 0x5FF6 +0x8FBDCF 0x5FFA +0x8FBDD0 0x5FFC +0x8FBDD1 0x6007 +0x8FBDD2 0x600A +0x8FBDD3 0x600D +0x8FBDD4 0x6013 +0x8FBDD5 0x6014 +0x8FBDD6 0x6017 +0x8FBDD7 0x6018 +0x8FBDD8 0x601A +0x8FBDD9 0x601F +0x8FBDDA 0x6024 +0x8FBDDB 0x602D +0x8FBDDC 0x6033 +0x8FBDDD 0x6035 +0x8FBDDE 0x6040 +0x8FBDDF 0x6047 +0x8FBDE0 0x6048 +0x8FBDE1 0x6049 +0x8FBDE2 0x604C +0x8FBDE3 0x6051 +0x8FBDE4 0x6054 +0x8FBDE5 0x6056 +0x8FBDE6 0x6057 +0x8FBDE7 0x605D +0x8FBDE8 0x6061 +0x8FBDE9 0x6067 +0x8FBDEA 0x6071 +0x8FBDEB 0x607E +0x8FBDEC 0x607F +0x8FBDED 0x6082 +0x8FBDEE 0x6086 +0x8FBDEF 0x6088 +0x8FBDF0 0x608A +0x8FBDF1 0x608E +0x8FBDF2 0x6091 +0x8FBDF3 0x6093 +0x8FBDF4 0x6095 +0x8FBDF5 0x6098 +0x8FBDF6 0x609D +0x8FBDF7 0x609E +0x8FBDF8 0x60A2 +0x8FBDF9 0x60A4 +0x8FBDFA 0x60A5 +0x8FBDFB 0x60A8 +0x8FBDFC 0x60B0 +0x8FBDFD 0x60B1 +0x8FBDFE 0x60B7 +0x8FBEA1 0x60BB +0x8FBEA2 0x60BE +0x8FBEA3 0x60C2 +0x8FBEA4 0x60C4 +0x8FBEA5 0x60C8 +0x8FBEA6 0x60C9 +0x8FBEA7 0x60CA +0x8FBEA8 0x60CB +0x8FBEA9 0x60CE +0x8FBEAA 0x60CF +0x8FBEAB 0x60D4 +0x8FBEAC 0x60D5 +0x8FBEAD 0x60D9 +0x8FBEAE 0x60DB +0x8FBEAF 0x60DD +0x8FBEB0 0x60DE +0x8FBEB1 0x60E2 +0x8FBEB2 0x60E5 +0x8FBEB3 0x60F2 +0x8FBEB4 0x60F5 +0x8FBEB5 0x60F8 +0x8FBEB6 0x60FC +0x8FBEB7 0x60FD +0x8FBEB8 0x6102 +0x8FBEB9 0x6107 +0x8FBEBA 0x610A +0x8FBEBB 0x610C +0x8FBEBC 0x6110 +0x8FBEBD 0x6111 +0x8FBEBE 0x6112 +0x8FBEBF 0x6113 +0x8FBEC0 0x6114 +0x8FBEC1 0x6116 +0x8FBEC2 0x6117 +0x8FBEC3 0x6119 +0x8FBEC4 0x611C +0x8FBEC5 0x611E +0x8FBEC6 0x6122 +0x8FBEC7 0x612A +0x8FBEC8 0x612B +0x8FBEC9 0x6130 +0x8FBECA 0x6131 +0x8FBECB 0x6135 +0x8FBECC 0x6136 +0x8FBECD 0x6137 +0x8FBECE 0x6139 +0x8FBECF 0x6141 +0x8FBED0 0x6145 +0x8FBED1 0x6146 +0x8FBED2 0x6149 +0x8FBED3 0x615E +0x8FBED4 0x6160 +0x8FBED5 0x616C +0x8FBED6 0x6172 +0x8FBED7 0x6178 +0x8FBED8 0x617B +0x8FBED9 0x617C +0x8FBEDA 0x617F +0x8FBEDB 0x6180 +0x8FBEDC 0x6181 +0x8FBEDD 0x6183 +0x8FBEDE 0x6184 +0x8FBEDF 0x618B +0x8FBEE0 0x618D +0x8FBEE1 0x6192 +0x8FBEE2 0x6193 +0x8FBEE3 0x6197 +0x8FBEE4 0x6198 +0x8FBEE5 0x619C +0x8FBEE6 0x619D +0x8FBEE7 0x619F +0x8FBEE8 0x61A0 +0x8FBEE9 0x61A5 +0x8FBEEA 0x61A8 +0x8FBEEB 0x61AA +0x8FBEEC 0x61AD +0x8FBEED 0x61B8 +0x8FBEEE 0x61B9 +0x8FBEEF 0x61BC +0x8FBEF0 0x61C0 +0x8FBEF1 0x61C1 +0x8FBEF2 0x61C2 +0x8FBEF3 0x61CE +0x8FBEF4 0x61CF +0x8FBEF5 0x61D5 +0x8FBEF6 0x61DC +0x8FBEF7 0x61DD +0x8FBEF8 0x61DE +0x8FBEF9 0x61DF +0x8FBEFA 0x61E1 +0x8FBEFB 0x61E2 +0x8FBEFC 0x61E7 +0x8FBEFD 0x61E9 +0x8FBEFE 0x61E5 +0x8FBFA1 0x61EC +0x8FBFA2 0x61ED +0x8FBFA3 0x61EF +0x8FBFA4 0x6201 +0x8FBFA5 0x6203 +0x8FBFA6 0x6204 +0x8FBFA7 0x6207 +0x8FBFA8 0x6213 +0x8FBFA9 0x6215 +0x8FBFAA 0x621C +0x8FBFAB 0x6220 +0x8FBFAC 0x6222 +0x8FBFAD 0x6223 +0x8FBFAE 0x6227 +0x8FBFAF 0x6229 +0x8FBFB0 0x622B +0x8FBFB1 0x6239 +0x8FBFB2 0x623D +0x8FBFB3 0x6242 +0x8FBFB4 0x6243 +0x8FBFB5 0x6244 +0x8FBFB6 0x6246 +0x8FBFB7 0x624C +0x8FBFB8 0x6250 +0x8FBFB9 0x6251 +0x8FBFBA 0x6252 +0x8FBFBB 0x6254 +0x8FBFBC 0x6256 +0x8FBFBD 0x625A +0x8FBFBE 0x625C +0x8FBFBF 0x6264 +0x8FBFC0 0x626D +0x8FBFC1 0x626F +0x8FBFC2 0x6273 +0x8FBFC3 0x627A +0x8FBFC4 0x627D +0x8FBFC5 0x628D +0x8FBFC6 0x628E +0x8FBFC7 0x628F +0x8FBFC8 0x6290 +0x8FBFC9 0x62A6 +0x8FBFCA 0x62A8 +0x8FBFCB 0x62B3 +0x8FBFCC 0x62B6 +0x8FBFCD 0x62B7 +0x8FBFCE 0x62BA +0x8FBFCF 0x62BE +0x8FBFD0 0x62BF +0x8FBFD1 0x62C4 +0x8FBFD2 0x62CE +0x8FBFD3 0x62D5 +0x8FBFD4 0x62D6 +0x8FBFD5 0x62DA +0x8FBFD6 0x62EA +0x8FBFD7 0x62F2 +0x8FBFD8 0x62F4 +0x8FBFD9 0x62FC +0x8FBFDA 0x62FD +0x8FBFDB 0x6303 +0x8FBFDC 0x6304 +0x8FBFDD 0x630A +0x8FBFDE 0x630B +0x8FBFDF 0x630D +0x8FBFE0 0x6310 +0x8FBFE1 0x6313 +0x8FBFE2 0x6316 +0x8FBFE3 0x6318 +0x8FBFE4 0x6329 +0x8FBFE5 0x632A +0x8FBFE6 0x632D +0x8FBFE7 0x6335 +0x8FBFE8 0x6336 +0x8FBFE9 0x6339 +0x8FBFEA 0x633C +0x8FBFEB 0x6341 +0x8FBFEC 0x6342 +0x8FBFED 0x6343 +0x8FBFEE 0x6344 +0x8FBFEF 0x6346 +0x8FBFF0 0x634A +0x8FBFF1 0x634B +0x8FBFF2 0x634E +0x8FBFF3 0x6352 +0x8FBFF4 0x6353 +0x8FBFF5 0x6354 +0x8FBFF6 0x6358 +0x8FBFF7 0x635B +0x8FBFF8 0x6365 +0x8FBFF9 0x6366 +0x8FBFFA 0x636C +0x8FBFFB 0x636D +0x8FBFFC 0x6371 +0x8FBFFD 0x6374 +0x8FBFFE 0x6375 +0x8FC0A1 0x6378 +0x8FC0A2 0x637C +0x8FC0A3 0x637D +0x8FC0A4 0x637F +0x8FC0A5 0x6382 +0x8FC0A6 0x6384 +0x8FC0A7 0x6387 +0x8FC0A8 0x638A +0x8FC0A9 0x6390 +0x8FC0AA 0x6394 +0x8FC0AB 0x6395 +0x8FC0AC 0x6399 +0x8FC0AD 0x639A +0x8FC0AE 0x639E +0x8FC0AF 0x63A4 +0x8FC0B0 0x63A6 +0x8FC0B1 0x63AD +0x8FC0B2 0x63AE +0x8FC0B3 0x63AF +0x8FC0B4 0x63BD +0x8FC0B5 0x63C1 +0x8FC0B6 0x63C5 +0x8FC0B7 0x63C8 +0x8FC0B8 0x63CE +0x8FC0B9 0x63D1 +0x8FC0BA 0x63D3 +0x8FC0BB 0x63D4 +0x8FC0BC 0x63D5 +0x8FC0BD 0x63DC +0x8FC0BE 0x63E0 +0x8FC0BF 0x63E5 +0x8FC0C0 0x63EA +0x8FC0C1 0x63EC +0x8FC0C2 0x63F2 +0x8FC0C3 0x63F3 +0x8FC0C4 0x63F5 +0x8FC0C5 0x63F8 +0x8FC0C6 0x63F9 +0x8FC0C7 0x6409 +0x8FC0C8 0x640A +0x8FC0C9 0x6410 +0x8FC0CA 0x6412 +0x8FC0CB 0x6414 +0x8FC0CC 0x6418 +0x8FC0CD 0x641E +0x8FC0CE 0x6420 +0x8FC0CF 0x6422 +0x8FC0D0 0x6424 +0x8FC0D1 0x6425 +0x8FC0D2 0x6429 +0x8FC0D3 0x642A +0x8FC0D4 0x642F +0x8FC0D5 0x6430 +0x8FC0D6 0x6435 +0x8FC0D7 0x643D +0x8FC0D8 0x643F +0x8FC0D9 0x644B +0x8FC0DA 0x644F +0x8FC0DB 0x6451 +0x8FC0DC 0x6452 +0x8FC0DD 0x6453 +0x8FC0DE 0x6454 +0x8FC0DF 0x645A +0x8FC0E0 0x645B +0x8FC0E1 0x645C +0x8FC0E2 0x645D +0x8FC0E3 0x645F +0x8FC0E4 0x6460 +0x8FC0E5 0x6461 +0x8FC0E6 0x6463 +0x8FC0E7 0x646D +0x8FC0E8 0x6473 +0x8FC0E9 0x6474 +0x8FC0EA 0x647B +0x8FC0EB 0x647D +0x8FC0EC 0x6485 +0x8FC0ED 0x6487 +0x8FC0EE 0x648F +0x8FC0EF 0x6490 +0x8FC0F0 0x6491 +0x8FC0F1 0x6498 +0x8FC0F2 0x6499 +0x8FC0F3 0x649B +0x8FC0F4 0x649D +0x8FC0F5 0x649F +0x8FC0F6 0x64A1 +0x8FC0F7 0x64A3 +0x8FC0F8 0x64A6 +0x8FC0F9 0x64A8 +0x8FC0FA 0x64AC +0x8FC0FB 0x64B3 +0x8FC0FC 0x64BD +0x8FC0FD 0x64BE +0x8FC0FE 0x64BF +0x8FC1A1 0x64C4 +0x8FC1A2 0x64C9 +0x8FC1A3 0x64CA +0x8FC1A4 0x64CB +0x8FC1A5 0x64CC +0x8FC1A6 0x64CE +0x8FC1A7 0x64D0 +0x8FC1A8 0x64D1 +0x8FC1A9 0x64D5 +0x8FC1AA 0x64D7 +0x8FC1AB 0x64E4 +0x8FC1AC 0x64E5 +0x8FC1AD 0x64E9 +0x8FC1AE 0x64EA +0x8FC1AF 0x64ED +0x8FC1B0 0x64F0 +0x8FC1B1 0x64F5 +0x8FC1B2 0x64F7 +0x8FC1B3 0x64FB +0x8FC1B4 0x64FF +0x8FC1B5 0x6501 +0x8FC1B6 0x6504 +0x8FC1B7 0x6508 +0x8FC1B8 0x6509 +0x8FC1B9 0x650A +0x8FC1BA 0x650F +0x8FC1BB 0x6513 +0x8FC1BC 0x6514 +0x8FC1BD 0x6516 +0x8FC1BE 0x6519 +0x8FC1BF 0x651B +0x8FC1C0 0x651E +0x8FC1C1 0x651F +0x8FC1C2 0x6522 +0x8FC1C3 0x6526 +0x8FC1C4 0x6529 +0x8FC1C5 0x652E +0x8FC1C6 0x6531 +0x8FC1C7 0x653A +0x8FC1C8 0x653C +0x8FC1C9 0x653D +0x8FC1CA 0x6543 +0x8FC1CB 0x6547 +0x8FC1CC 0x6549 +0x8FC1CD 0x6550 +0x8FC1CE 0x6552 +0x8FC1CF 0x6554 +0x8FC1D0 0x655F +0x8FC1D1 0x6560 +0x8FC1D2 0x6567 +0x8FC1D3 0x656B +0x8FC1D4 0x657A +0x8FC1D5 0x657D +0x8FC1D6 0x6581 +0x8FC1D7 0x6585 +0x8FC1D8 0x658A +0x8FC1D9 0x6592 +0x8FC1DA 0x6595 +0x8FC1DB 0x6598 +0x8FC1DC 0x659D +0x8FC1DD 0x65A0 +0x8FC1DE 0x65A3 +0x8FC1DF 0x65A6 +0x8FC1E0 0x65AE +0x8FC1E1 0x65B2 +0x8FC1E2 0x65B3 +0x8FC1E3 0x65B4 +0x8FC1E4 0x65BF +0x8FC1E5 0x65C2 +0x8FC1E6 0x65C8 +0x8FC1E7 0x65C9 +0x8FC1E8 0x65CE +0x8FC1E9 0x65D0 +0x8FC1EA 0x65D4 +0x8FC1EB 0x65D6 +0x8FC1EC 0x65D8 +0x8FC1ED 0x65DF +0x8FC1EE 0x65F0 +0x8FC1EF 0x65F2 +0x8FC1F0 0x65F4 +0x8FC1F1 0x65F5 +0x8FC1F2 0x65F9 +0x8FC1F3 0x65FE +0x8FC1F4 0x65FF +0x8FC1F5 0x6600 +0x8FC1F6 0x6604 +0x8FC1F7 0x6608 +0x8FC1F8 0x6609 +0x8FC1F9 0x660D +0x8FC1FA 0x6611 +0x8FC1FB 0x6612 +0x8FC1FC 0x6615 +0x8FC1FD 0x6616 +0x8FC1FE 0x661D +0x8FC2A1 0x661E +0x8FC2A2 0x6621 +0x8FC2A3 0x6622 +0x8FC2A4 0x6623 +0x8FC2A5 0x6624 +0x8FC2A6 0x6626 +0x8FC2A7 0x6629 +0x8FC2A8 0x662A +0x8FC2A9 0x662B +0x8FC2AA 0x662C +0x8FC2AB 0x662E +0x8FC2AC 0x6630 +0x8FC2AD 0x6631 +0x8FC2AE 0x6633 +0x8FC2AF 0x6639 +0x8FC2B0 0x6637 +0x8FC2B1 0x6640 +0x8FC2B2 0x6645 +0x8FC2B3 0x6646 +0x8FC2B4 0x664A +0x8FC2B5 0x664C +0x8FC2B6 0x6651 +0x8FC2B7 0x664E +0x8FC2B8 0x6657 +0x8FC2B9 0x6658 +0x8FC2BA 0x6659 +0x8FC2BB 0x665B +0x8FC2BC 0x665C +0x8FC2BD 0x6660 +0x8FC2BE 0x6661 +0x8FC2BF 0x66FB +0x8FC2C0 0x666A +0x8FC2C1 0x666B +0x8FC2C2 0x666C +0x8FC2C3 0x667E +0x8FC2C4 0x6673 +0x8FC2C5 0x6675 +0x8FC2C6 0x667F +0x8FC2C7 0x6677 +0x8FC2C8 0x6678 +0x8FC2C9 0x6679 +0x8FC2CA 0x667B +0x8FC2CB 0x6680 +0x8FC2CC 0x667C +0x8FC2CD 0x668B +0x8FC2CE 0x668C +0x8FC2CF 0x668D +0x8FC2D0 0x6690 +0x8FC2D1 0x6692 +0x8FC2D2 0x6699 +0x8FC2D3 0x669A +0x8FC2D4 0x669B +0x8FC2D5 0x669C +0x8FC2D6 0x669F +0x8FC2D7 0x66A0 +0x8FC2D8 0x66A4 +0x8FC2D9 0x66AD +0x8FC2DA 0x66B1 +0x8FC2DB 0x66B2 +0x8FC2DC 0x66B5 +0x8FC2DD 0x66BB +0x8FC2DE 0x66BF +0x8FC2DF 0x66C0 +0x8FC2E0 0x66C2 +0x8FC2E1 0x66C3 +0x8FC2E2 0x66C8 +0x8FC2E3 0x66CC +0x8FC2E4 0x66CE +0x8FC2E5 0x66CF +0x8FC2E6 0x66D4 +0x8FC2E7 0x66DB +0x8FC2E8 0x66DF +0x8FC2E9 0x66E8 +0x8FC2EA 0x66EB +0x8FC2EB 0x66EC +0x8FC2EC 0x66EE +0x8FC2ED 0x66FA +0x8FC2EE 0x6705 +0x8FC2EF 0x6707 +0x8FC2F0 0x670E +0x8FC2F1 0x6713 +0x8FC2F2 0x6719 +0x8FC2F3 0x671C +0x8FC2F4 0x6720 +0x8FC2F5 0x6722 +0x8FC2F6 0x6733 +0x8FC2F7 0x673E +0x8FC2F8 0x6745 +0x8FC2F9 0x6747 +0x8FC2FA 0x6748 +0x8FC2FB 0x674C +0x8FC2FC 0x6754 +0x8FC2FD 0x6755 +0x8FC2FE 0x675D +0x8FC3A1 0x6766 +0x8FC3A2 0x676C +0x8FC3A3 0x676E +0x8FC3A4 0x6774 +0x8FC3A5 0x6776 +0x8FC3A6 0x677B +0x8FC3A7 0x6781 +0x8FC3A8 0x6784 +0x8FC3A9 0x678E +0x8FC3AA 0x678F +0x8FC3AB 0x6791 +0x8FC3AC 0x6793 +0x8FC3AD 0x6796 +0x8FC3AE 0x6798 +0x8FC3AF 0x6799 +0x8FC3B0 0x679B +0x8FC3B1 0x67B0 +0x8FC3B2 0x67B1 +0x8FC3B3 0x67B2 +0x8FC3B4 0x67B5 +0x8FC3B5 0x67BB +0x8FC3B6 0x67BC +0x8FC3B7 0x67BD +0x8FC3B8 0x67F9 +0x8FC3B9 0x67C0 +0x8FC3BA 0x67C2 +0x8FC3BB 0x67C3 +0x8FC3BC 0x67C5 +0x8FC3BD 0x67C8 +0x8FC3BE 0x67C9 +0x8FC3BF 0x67D2 +0x8FC3C0 0x67D7 +0x8FC3C1 0x67D9 +0x8FC3C2 0x67DC +0x8FC3C3 0x67E1 +0x8FC3C4 0x67E6 +0x8FC3C5 0x67F0 +0x8FC3C6 0x67F2 +0x8FC3C7 0x67F6 +0x8FC3C8 0x67F7 +0x8FC3C9 0x6852 +0x8FC3CA 0x6814 +0x8FC3CB 0x6819 +0x8FC3CC 0x681D +0x8FC3CD 0x681F +0x8FC3CE 0x6828 +0x8FC3CF 0x6827 +0x8FC3D0 0x682C +0x8FC3D1 0x682D +0x8FC3D2 0x682F +0x8FC3D3 0x6830 +0x8FC3D4 0x6831 +0x8FC3D5 0x6833 +0x8FC3D6 0x683B +0x8FC3D7 0x683F +0x8FC3D8 0x6844 +0x8FC3D9 0x6845 +0x8FC3DA 0x684A +0x8FC3DB 0x684C +0x8FC3DC 0x6855 +0x8FC3DD 0x6857 +0x8FC3DE 0x6858 +0x8FC3DF 0x685B +0x8FC3E0 0x686B +0x8FC3E1 0x686E +0x8FC3E2 0x686F +0x8FC3E3 0x6870 +0x8FC3E4 0x6871 +0x8FC3E5 0x6872 +0x8FC3E6 0x6875 +0x8FC3E7 0x6879 +0x8FC3E8 0x687A +0x8FC3E9 0x687B +0x8FC3EA 0x687C +0x8FC3EB 0x6882 +0x8FC3EC 0x6884 +0x8FC3ED 0x6886 +0x8FC3EE 0x6888 +0x8FC3EF 0x6896 +0x8FC3F0 0x6898 +0x8FC3F1 0x689A +0x8FC3F2 0x689C +0x8FC3F3 0x68A1 +0x8FC3F4 0x68A3 +0x8FC3F5 0x68A5 +0x8FC3F6 0x68A9 +0x8FC3F7 0x68AA +0x8FC3F8 0x68AE +0x8FC3F9 0x68B2 +0x8FC3FA 0x68BB +0x8FC3FB 0x68C5 +0x8FC3FC 0x68C8 +0x8FC3FD 0x68CC +0x8FC3FE 0x68CF +0x8FC4A1 0x68D0 +0x8FC4A2 0x68D1 +0x8FC4A3 0x68D3 +0x8FC4A4 0x68D6 +0x8FC4A5 0x68D9 +0x8FC4A6 0x68DC +0x8FC4A7 0x68DD +0x8FC4A8 0x68E5 +0x8FC4A9 0x68E8 +0x8FC4AA 0x68EA +0x8FC4AB 0x68EB +0x8FC4AC 0x68EC +0x8FC4AD 0x68ED +0x8FC4AE 0x68F0 +0x8FC4AF 0x68F1 +0x8FC4B0 0x68F5 +0x8FC4B1 0x68F6 +0x8FC4B2 0x68FB +0x8FC4B3 0x68FC +0x8FC4B4 0x68FD +0x8FC4B5 0x6906 +0x8FC4B6 0x6909 +0x8FC4B7 0x690A +0x8FC4B8 0x6910 +0x8FC4B9 0x6911 +0x8FC4BA 0x6913 +0x8FC4BB 0x6916 +0x8FC4BC 0x6917 +0x8FC4BD 0x6931 +0x8FC4BE 0x6933 +0x8FC4BF 0x6935 +0x8FC4C0 0x6938 +0x8FC4C1 0x693B +0x8FC4C2 0x6942 +0x8FC4C3 0x6945 +0x8FC4C4 0x6949 +0x8FC4C5 0x694E +0x8FC4C6 0x6957 +0x8FC4C7 0x695B +0x8FC4C8 0x6963 +0x8FC4C9 0x6964 +0x8FC4CA 0x6965 +0x8FC4CB 0x6966 +0x8FC4CC 0x6968 +0x8FC4CD 0x6969 +0x8FC4CE 0x696C +0x8FC4CF 0x6970 +0x8FC4D0 0x6971 +0x8FC4D1 0x6972 +0x8FC4D2 0x697A +0x8FC4D3 0x697B +0x8FC4D4 0x697F +0x8FC4D5 0x6980 +0x8FC4D6 0x698D +0x8FC4D7 0x6992 +0x8FC4D8 0x6996 +0x8FC4D9 0x6998 +0x8FC4DA 0x69A1 +0x8FC4DB 0x69A5 +0x8FC4DC 0x69A6 +0x8FC4DD 0x69A8 +0x8FC4DE 0x69AB +0x8FC4DF 0x69AD +0x8FC4E0 0x69AF +0x8FC4E1 0x69B7 +0x8FC4E2 0x69B8 +0x8FC4E3 0x69BA +0x8FC4E4 0x69BC +0x8FC4E5 0x69C5 +0x8FC4E6 0x69C8 +0x8FC4E7 0x69D1 +0x8FC4E8 0x69D6 +0x8FC4E9 0x69D7 +0x8FC4EA 0x69E2 +0x8FC4EB 0x69E5 +0x8FC4EC 0x69EE +0x8FC4ED 0x69EF +0x8FC4EE 0x69F1 +0x8FC4EF 0x69F3 +0x8FC4F0 0x69F5 +0x8FC4F1 0x69FE +0x8FC4F2 0x6A00 +0x8FC4F3 0x6A01 +0x8FC4F4 0x6A03 +0x8FC4F5 0x6A0F +0x8FC4F6 0x6A11 +0x8FC4F7 0x6A15 +0x8FC4F8 0x6A1A +0x8FC4F9 0x6A1D +0x8FC4FA 0x6A20 +0x8FC4FB 0x6A24 +0x8FC4FC 0x6A28 +0x8FC4FD 0x6A30 +0x8FC4FE 0x6A32 +0x8FC5A1 0x6A34 +0x8FC5A2 0x6A37 +0x8FC5A3 0x6A3B +0x8FC5A4 0x6A3E +0x8FC5A5 0x6A3F +0x8FC5A6 0x6A45 +0x8FC5A7 0x6A46 +0x8FC5A8 0x6A49 +0x8FC5A9 0x6A4A +0x8FC5AA 0x6A4E +0x8FC5AB 0x6A50 +0x8FC5AC 0x6A51 +0x8FC5AD 0x6A52 +0x8FC5AE 0x6A55 +0x8FC5AF 0x6A56 +0x8FC5B0 0x6A5B +0x8FC5B1 0x6A64 +0x8FC5B2 0x6A67 +0x8FC5B3 0x6A6A +0x8FC5B4 0x6A71 +0x8FC5B5 0x6A73 +0x8FC5B6 0x6A7E +0x8FC5B7 0x6A81 +0x8FC5B8 0x6A83 +0x8FC5B9 0x6A86 +0x8FC5BA 0x6A87 +0x8FC5BB 0x6A89 +0x8FC5BC 0x6A8B +0x8FC5BD 0x6A91 +0x8FC5BE 0x6A9B +0x8FC5BF 0x6A9D +0x8FC5C0 0x6A9E +0x8FC5C1 0x6A9F +0x8FC5C2 0x6AA5 +0x8FC5C3 0x6AAB +0x8FC5C4 0x6AAF +0x8FC5C5 0x6AB0 +0x8FC5C6 0x6AB1 +0x8FC5C7 0x6AB4 +0x8FC5C8 0x6ABD +0x8FC5C9 0x6ABE +0x8FC5CA 0x6ABF +0x8FC5CB 0x6AC6 +0x8FC5CC 0x6AC9 +0x8FC5CD 0x6AC8 +0x8FC5CE 0x6ACC +0x8FC5CF 0x6AD0 +0x8FC5D0 0x6AD4 +0x8FC5D1 0x6AD5 +0x8FC5D2 0x6AD6 +0x8FC5D3 0x6ADC +0x8FC5D4 0x6ADD +0x8FC5D5 0x6AE4 +0x8FC5D6 0x6AE7 +0x8FC5D7 0x6AEC +0x8FC5D8 0x6AF0 +0x8FC5D9 0x6AF1 +0x8FC5DA 0x6AF2 +0x8FC5DB 0x6AFC +0x8FC5DC 0x6AFD +0x8FC5DD 0x6B02 +0x8FC5DE 0x6B03 +0x8FC5DF 0x6B06 +0x8FC5E0 0x6B07 +0x8FC5E1 0x6B09 +0x8FC5E2 0x6B0F +0x8FC5E3 0x6B10 +0x8FC5E4 0x6B11 +0x8FC5E5 0x6B17 +0x8FC5E6 0x6B1B +0x8FC5E7 0x6B1E +0x8FC5E8 0x6B24 +0x8FC5E9 0x6B28 +0x8FC5EA 0x6B2B +0x8FC5EB 0x6B2C +0x8FC5EC 0x6B2F +0x8FC5ED 0x6B35 +0x8FC5EE 0x6B36 +0x8FC5EF 0x6B3B +0x8FC5F0 0x6B3F +0x8FC5F1 0x6B46 +0x8FC5F2 0x6B4A +0x8FC5F3 0x6B4D +0x8FC5F4 0x6B52 +0x8FC5F5 0x6B56 +0x8FC5F6 0x6B58 +0x8FC5F7 0x6B5D +0x8FC5F8 0x6B60 +0x8FC5F9 0x6B67 +0x8FC5FA 0x6B6B +0x8FC5FB 0x6B6E +0x8FC5FC 0x6B70 +0x8FC5FD 0x6B75 +0x8FC5FE 0x6B7D +0x8FC6A1 0x6B7E +0x8FC6A2 0x6B82 +0x8FC6A3 0x6B85 +0x8FC6A4 0x6B97 +0x8FC6A5 0x6B9B +0x8FC6A6 0x6B9F +0x8FC6A7 0x6BA0 +0x8FC6A8 0x6BA2 +0x8FC6A9 0x6BA3 +0x8FC6AA 0x6BA8 +0x8FC6AB 0x6BA9 +0x8FC6AC 0x6BAC +0x8FC6AD 0x6BAD +0x8FC6AE 0x6BAE +0x8FC6AF 0x6BB0 +0x8FC6B0 0x6BB8 +0x8FC6B1 0x6BB9 +0x8FC6B2 0x6BBD +0x8FC6B3 0x6BBE +0x8FC6B4 0x6BC3 +0x8FC6B5 0x6BC4 +0x8FC6B6 0x6BC9 +0x8FC6B7 0x6BCC +0x8FC6B8 0x6BD6 +0x8FC6B9 0x6BDA +0x8FC6BA 0x6BE1 +0x8FC6BB 0x6BE3 +0x8FC6BC 0x6BE6 +0x8FC6BD 0x6BE7 +0x8FC6BE 0x6BEE +0x8FC6BF 0x6BF1 +0x8FC6C0 0x6BF7 +0x8FC6C1 0x6BF9 +0x8FC6C2 0x6BFF +0x8FC6C3 0x6C02 +0x8FC6C4 0x6C04 +0x8FC6C5 0x6C05 +0x8FC6C6 0x6C09 +0x8FC6C7 0x6C0D +0x8FC6C8 0x6C0E +0x8FC6C9 0x6C10 +0x8FC6CA 0x6C12 +0x8FC6CB 0x6C19 +0x8FC6CC 0x6C1F +0x8FC6CD 0x6C26 +0x8FC6CE 0x6C27 +0x8FC6CF 0x6C28 +0x8FC6D0 0x6C2C +0x8FC6D1 0x6C2E +0x8FC6D2 0x6C33 +0x8FC6D3 0x6C35 +0x8FC6D4 0x6C36 +0x8FC6D5 0x6C3A +0x8FC6D6 0x6C3B +0x8FC6D7 0x6C3F +0x8FC6D8 0x6C4A +0x8FC6D9 0x6C4B +0x8FC6DA 0x6C4D +0x8FC6DB 0x6C4F +0x8FC6DC 0x6C52 +0x8FC6DD 0x6C54 +0x8FC6DE 0x6C59 +0x8FC6DF 0x6C5B +0x8FC6E0 0x6C5C +0x8FC6E1 0x6C6B +0x8FC6E2 0x6C6D +0x8FC6E3 0x6C6F +0x8FC6E4 0x6C74 +0x8FC6E5 0x6C76 +0x8FC6E6 0x6C78 +0x8FC6E7 0x6C79 +0x8FC6E8 0x6C7B +0x8FC6E9 0x6C85 +0x8FC6EA 0x6C86 +0x8FC6EB 0x6C87 +0x8FC6EC 0x6C89 +0x8FC6ED 0x6C94 +0x8FC6EE 0x6C95 +0x8FC6EF 0x6C97 +0x8FC6F0 0x6C98 +0x8FC6F1 0x6C9C +0x8FC6F2 0x6C9F +0x8FC6F3 0x6CB0 +0x8FC6F4 0x6CB2 +0x8FC6F5 0x6CB4 +0x8FC6F6 0x6CC2 +0x8FC6F7 0x6CC6 +0x8FC6F8 0x6CCD +0x8FC6F9 0x6CCF +0x8FC6FA 0x6CD0 +0x8FC6FB 0x6CD1 +0x8FC6FC 0x6CD2 +0x8FC6FD 0x6CD4 +0x8FC6FE 0x6CD6 +0x8FC7A1 0x6CDA +0x8FC7A2 0x6CDC +0x8FC7A3 0x6CE0 +0x8FC7A4 0x6CE7 +0x8FC7A5 0x6CE9 +0x8FC7A6 0x6CEB +0x8FC7A7 0x6CEC +0x8FC7A8 0x6CEE +0x8FC7A9 0x6CF2 +0x8FC7AA 0x6CF4 +0x8FC7AB 0x6D04 +0x8FC7AC 0x6D07 +0x8FC7AD 0x6D0A +0x8FC7AE 0x6D0E +0x8FC7AF 0x6D0F +0x8FC7B0 0x6D11 +0x8FC7B1 0x6D13 +0x8FC7B2 0x6D1A +0x8FC7B3 0x6D26 +0x8FC7B4 0x6D27 +0x8FC7B5 0x6D28 +0x8FC7B6 0x6C67 +0x8FC7B7 0x6D2E +0x8FC7B8 0x6D2F +0x8FC7B9 0x6D31 +0x8FC7BA 0x6D39 +0x8FC7BB 0x6D3C +0x8FC7BC 0x6D3F +0x8FC7BD 0x6D57 +0x8FC7BE 0x6D5E +0x8FC7BF 0x6D5F +0x8FC7C0 0x6D61 +0x8FC7C1 0x6D65 +0x8FC7C2 0x6D67 +0x8FC7C3 0x6D6F +0x8FC7C4 0x6D70 +0x8FC7C5 0x6D7C +0x8FC7C6 0x6D82 +0x8FC7C7 0x6D87 +0x8FC7C8 0x6D91 +0x8FC7C9 0x6D92 +0x8FC7CA 0x6D94 +0x8FC7CB 0x6D96 +0x8FC7CC 0x6D97 +0x8FC7CD 0x6D98 +0x8FC7CE 0x6DAA +0x8FC7CF 0x6DAC +0x8FC7D0 0x6DB4 +0x8FC7D1 0x6DB7 +0x8FC7D2 0x6DB9 +0x8FC7D3 0x6DBD +0x8FC7D4 0x6DBF +0x8FC7D5 0x6DC4 +0x8FC7D6 0x6DC8 +0x8FC7D7 0x6DCA +0x8FC7D8 0x6DCE +0x8FC7D9 0x6DCF +0x8FC7DA 0x6DD6 +0x8FC7DB 0x6DDB +0x8FC7DC 0x6DDD +0x8FC7DD 0x6DDF +0x8FC7DE 0x6DE0 +0x8FC7DF 0x6DE2 +0x8FC7E0 0x6DE5 +0x8FC7E1 0x6DE9 +0x8FC7E2 0x6DEF +0x8FC7E3 0x6DF0 +0x8FC7E4 0x6DF4 +0x8FC7E5 0x6DF6 +0x8FC7E6 0x6DFC +0x8FC7E7 0x6E00 +0x8FC7E8 0x6E04 +0x8FC7E9 0x6E1E +0x8FC7EA 0x6E22 +0x8FC7EB 0x6E27 +0x8FC7EC 0x6E32 +0x8FC7ED 0x6E36 +0x8FC7EE 0x6E39 +0x8FC7EF 0x6E3B +0x8FC7F0 0x6E3C +0x8FC7F1 0x6E44 +0x8FC7F2 0x6E45 +0x8FC7F3 0x6E48 +0x8FC7F4 0x6E49 +0x8FC7F5 0x6E4B +0x8FC7F6 0x6E4F +0x8FC7F7 0x6E51 +0x8FC7F8 0x6E52 +0x8FC7F9 0x6E53 +0x8FC7FA 0x6E54 +0x8FC7FB 0x6E57 +0x8FC7FC 0x6E5C +0x8FC7FD 0x6E5D +0x8FC7FE 0x6E5E +0x8FC8A1 0x6E62 +0x8FC8A2 0x6E63 +0x8FC8A3 0x6E68 +0x8FC8A4 0x6E73 +0x8FC8A5 0x6E7B +0x8FC8A6 0x6E7D +0x8FC8A7 0x6E8D +0x8FC8A8 0x6E93 +0x8FC8A9 0x6E99 +0x8FC8AA 0x6EA0 +0x8FC8AB 0x6EA7 +0x8FC8AC 0x6EAD +0x8FC8AD 0x6EAE +0x8FC8AE 0x6EB1 +0x8FC8AF 0x6EB3 +0x8FC8B0 0x6EBB +0x8FC8B1 0x6EBF +0x8FC8B2 0x6EC0 +0x8FC8B3 0x6EC1 +0x8FC8B4 0x6EC3 +0x8FC8B5 0x6EC7 +0x8FC8B6 0x6EC8 +0x8FC8B7 0x6ECA +0x8FC8B8 0x6ECD +0x8FC8B9 0x6ECE +0x8FC8BA 0x6ECF +0x8FC8BB 0x6EEB +0x8FC8BC 0x6EED +0x8FC8BD 0x6EEE +0x8FC8BE 0x6EF9 +0x8FC8BF 0x6EFB +0x8FC8C0 0x6EFD +0x8FC8C1 0x6F04 +0x8FC8C2 0x6F08 +0x8FC8C3 0x6F0A +0x8FC8C4 0x6F0C +0x8FC8C5 0x6F0D +0x8FC8C6 0x6F16 +0x8FC8C7 0x6F18 +0x8FC8C8 0x6F1A +0x8FC8C9 0x6F1B +0x8FC8CA 0x6F26 +0x8FC8CB 0x6F29 +0x8FC8CC 0x6F2A +0x8FC8CD 0x6F2F +0x8FC8CE 0x6F30 +0x8FC8CF 0x6F33 +0x8FC8D0 0x6F36 +0x8FC8D1 0x6F3B +0x8FC8D2 0x6F3C +0x8FC8D3 0x6F2D +0x8FC8D4 0x6F4F +0x8FC8D5 0x6F51 +0x8FC8D6 0x6F52 +0x8FC8D7 0x6F53 +0x8FC8D8 0x6F57 +0x8FC8D9 0x6F59 +0x8FC8DA 0x6F5A +0x8FC8DB 0x6F5D +0x8FC8DC 0x6F5E +0x8FC8DD 0x6F61 +0x8FC8DE 0x6F62 +0x8FC8DF 0x6F68 +0x8FC8E0 0x6F6C +0x8FC8E1 0x6F7D +0x8FC8E2 0x6F7E +0x8FC8E3 0x6F83 +0x8FC8E4 0x6F87 +0x8FC8E5 0x6F88 +0x8FC8E6 0x6F8B +0x8FC8E7 0x6F8C +0x8FC8E8 0x6F8D +0x8FC8E9 0x6F90 +0x8FC8EA 0x6F92 +0x8FC8EB 0x6F93 +0x8FC8EC 0x6F94 +0x8FC8ED 0x6F96 +0x8FC8EE 0x6F9A +0x8FC8EF 0x6F9F +0x8FC8F0 0x6FA0 +0x8FC8F1 0x6FA5 +0x8FC8F2 0x6FA6 +0x8FC8F3 0x6FA7 +0x8FC8F4 0x6FA8 +0x8FC8F5 0x6FAE +0x8FC8F6 0x6FAF +0x8FC8F7 0x6FB0 +0x8FC8F8 0x6FB5 +0x8FC8F9 0x6FB6 +0x8FC8FA 0x6FBC +0x8FC8FB 0x6FC5 +0x8FC8FC 0x6FC7 +0x8FC8FD 0x6FC8 +0x8FC8FE 0x6FCA +0x8FC9A1 0x6FDA +0x8FC9A2 0x6FDE +0x8FC9A3 0x6FE8 +0x8FC9A4 0x6FE9 +0x8FC9A5 0x6FF0 +0x8FC9A6 0x6FF5 +0x8FC9A7 0x6FF9 +0x8FC9A8 0x6FFC +0x8FC9A9 0x6FFD +0x8FC9AA 0x7000 +0x8FC9AB 0x7005 +0x8FC9AC 0x7006 +0x8FC9AD 0x7007 +0x8FC9AE 0x700D +0x8FC9AF 0x7017 +0x8FC9B0 0x7020 +0x8FC9B1 0x7023 +0x8FC9B2 0x702F +0x8FC9B3 0x7034 +0x8FC9B4 0x7037 +0x8FC9B5 0x7039 +0x8FC9B6 0x703C +0x8FC9B7 0x7043 +0x8FC9B8 0x7044 +0x8FC9B9 0x7048 +0x8FC9BA 0x7049 +0x8FC9BB 0x704A +0x8FC9BC 0x704B +0x8FC9BD 0x7054 +0x8FC9BE 0x7055 +0x8FC9BF 0x705D +0x8FC9C0 0x705E +0x8FC9C1 0x704E +0x8FC9C2 0x7064 +0x8FC9C3 0x7065 +0x8FC9C4 0x706C +0x8FC9C5 0x706E +0x8FC9C6 0x7075 +0x8FC9C7 0x7076 +0x8FC9C8 0x707E +0x8FC9C9 0x7081 +0x8FC9CA 0x7085 +0x8FC9CB 0x7086 +0x8FC9CC 0x7094 +0x8FC9CD 0x7095 +0x8FC9CE 0x7096 +0x8FC9CF 0x7097 +0x8FC9D0 0x7098 +0x8FC9D1 0x709B +0x8FC9D2 0x70A4 +0x8FC9D3 0x70AB +0x8FC9D4 0x70B0 +0x8FC9D5 0x70B1 +0x8FC9D6 0x70B4 +0x8FC9D7 0x70B7 +0x8FC9D8 0x70CA +0x8FC9D9 0x70D1 +0x8FC9DA 0x70D3 +0x8FC9DB 0x70D4 +0x8FC9DC 0x70D5 +0x8FC9DD 0x70D6 +0x8FC9DE 0x70D8 +0x8FC9DF 0x70DC +0x8FC9E0 0x70E4 +0x8FC9E1 0x70FA +0x8FC9E2 0x7103 +0x8FC9E3 0x7104 +0x8FC9E4 0x7105 +0x8FC9E5 0x7106 +0x8FC9E6 0x7107 +0x8FC9E7 0x710B +0x8FC9E8 0x710C +0x8FC9E9 0x710F +0x8FC9EA 0x711E +0x8FC9EB 0x7120 +0x8FC9EC 0x712B +0x8FC9ED 0x712D +0x8FC9EE 0x712F +0x8FC9EF 0x7130 +0x8FC9F0 0x7131 +0x8FC9F1 0x7138 +0x8FC9F2 0x7141 +0x8FC9F3 0x7145 +0x8FC9F4 0x7146 +0x8FC9F5 0x7147 +0x8FC9F6 0x714A +0x8FC9F7 0x714B +0x8FC9F8 0x7150 +0x8FC9F9 0x7152 +0x8FC9FA 0x7157 +0x8FC9FB 0x715A +0x8FC9FC 0x715C +0x8FC9FD 0x715E +0x8FC9FE 0x7160 +0x8FCAA1 0x7168 +0x8FCAA2 0x7179 +0x8FCAA3 0x7180 +0x8FCAA4 0x7185 +0x8FCAA5 0x7187 +0x8FCAA6 0x718C +0x8FCAA7 0x7192 +0x8FCAA8 0x719A +0x8FCAA9 0x719B +0x8FCAAA 0x71A0 +0x8FCAAB 0x71A2 +0x8FCAAC 0x71AF +0x8FCAAD 0x71B0 +0x8FCAAE 0x71B2 +0x8FCAAF 0x71B3 +0x8FCAB0 0x71BA +0x8FCAB1 0x71BF +0x8FCAB2 0x71C0 +0x8FCAB3 0x71C1 +0x8FCAB4 0x71C4 +0x8FCAB5 0x71CB +0x8FCAB6 0x71CC +0x8FCAB7 0x71D3 +0x8FCAB8 0x71D6 +0x8FCAB9 0x71D9 +0x8FCABA 0x71DA +0x8FCABB 0x71DC +0x8FCABC 0x71F8 +0x8FCABD 0x71FE +0x8FCABE 0x7200 +0x8FCABF 0x7207 +0x8FCAC0 0x7208 +0x8FCAC1 0x7209 +0x8FCAC2 0x7213 +0x8FCAC3 0x7217 +0x8FCAC4 0x721A +0x8FCAC5 0x721D +0x8FCAC6 0x721F +0x8FCAC7 0x7224 +0x8FCAC8 0x722B +0x8FCAC9 0x722F +0x8FCACA 0x7234 +0x8FCACB 0x7238 +0x8FCACC 0x7239 +0x8FCACD 0x7241 +0x8FCACE 0x7242 +0x8FCACF 0x7243 +0x8FCAD0 0x7245 +0x8FCAD1 0x724E +0x8FCAD2 0x724F +0x8FCAD3 0x7250 +0x8FCAD4 0x7253 +0x8FCAD5 0x7255 +0x8FCAD6 0x7256 +0x8FCAD7 0x725A +0x8FCAD8 0x725C +0x8FCAD9 0x725E +0x8FCADA 0x7260 +0x8FCADB 0x7263 +0x8FCADC 0x7268 +0x8FCADD 0x726B +0x8FCADE 0x726E +0x8FCADF 0x726F +0x8FCAE0 0x7271 +0x8FCAE1 0x7277 +0x8FCAE2 0x7278 +0x8FCAE3 0x727B +0x8FCAE4 0x727C +0x8FCAE5 0x727F +0x8FCAE6 0x7284 +0x8FCAE7 0x7289 +0x8FCAE8 0x728D +0x8FCAE9 0x728E +0x8FCAEA 0x7293 +0x8FCAEB 0x729B +0x8FCAEC 0x72A8 +0x8FCAED 0x72AD +0x8FCAEE 0x72AE +0x8FCAEF 0x72B1 +0x8FCAF0 0x72B4 +0x8FCAF1 0x72BE +0x8FCAF2 0x72C1 +0x8FCAF3 0x72C7 +0x8FCAF4 0x72C9 +0x8FCAF5 0x72CC +0x8FCAF6 0x72D5 +0x8FCAF7 0x72D6 +0x8FCAF8 0x72D8 +0x8FCAF9 0x72DF +0x8FCAFA 0x72E5 +0x8FCAFB 0x72F3 +0x8FCAFC 0x72F4 +0x8FCAFD 0x72FA +0x8FCAFE 0x72FB +0x8FCBA1 0x72FE +0x8FCBA2 0x7302 +0x8FCBA3 0x7304 +0x8FCBA4 0x7305 +0x8FCBA5 0x7307 +0x8FCBA6 0x730B +0x8FCBA7 0x730D +0x8FCBA8 0x7312 +0x8FCBA9 0x7313 +0x8FCBAA 0x7318 +0x8FCBAB 0x7319 +0x8FCBAC 0x731E +0x8FCBAD 0x7322 +0x8FCBAE 0x7324 +0x8FCBAF 0x7327 +0x8FCBB0 0x7328 +0x8FCBB1 0x732C +0x8FCBB2 0x7331 +0x8FCBB3 0x7332 +0x8FCBB4 0x7335 +0x8FCBB5 0x733A +0x8FCBB6 0x733B +0x8FCBB7 0x733D +0x8FCBB8 0x7343 +0x8FCBB9 0x734D +0x8FCBBA 0x7350 +0x8FCBBB 0x7352 +0x8FCBBC 0x7356 +0x8FCBBD 0x7358 +0x8FCBBE 0x735D +0x8FCBBF 0x735E +0x8FCBC0 0x735F +0x8FCBC1 0x7360 +0x8FCBC2 0x7366 +0x8FCBC3 0x7367 +0x8FCBC4 0x7369 +0x8FCBC5 0x736B +0x8FCBC6 0x736C +0x8FCBC7 0x736E +0x8FCBC8 0x736F +0x8FCBC9 0x7371 +0x8FCBCA 0x7377 +0x8FCBCB 0x7379 +0x8FCBCC 0x737C +0x8FCBCD 0x7380 +0x8FCBCE 0x7381 +0x8FCBCF 0x7383 +0x8FCBD0 0x7385 +0x8FCBD1 0x7386 +0x8FCBD2 0x738E +0x8FCBD3 0x7390 +0x8FCBD4 0x7393 +0x8FCBD5 0x7395 +0x8FCBD6 0x7397 +0x8FCBD7 0x7398 +0x8FCBD8 0x739C +0x8FCBD9 0x739E +0x8FCBDA 0x739F +0x8FCBDB 0x73A0 +0x8FCBDC 0x73A2 +0x8FCBDD 0x73A5 +0x8FCBDE 0x73A6 +0x8FCBDF 0x73AA +0x8FCBE0 0x73AB +0x8FCBE1 0x73AD +0x8FCBE2 0x73B5 +0x8FCBE3 0x73B7 +0x8FCBE4 0x73B9 +0x8FCBE5 0x73BC +0x8FCBE6 0x73BD +0x8FCBE7 0x73BF +0x8FCBE8 0x73C5 +0x8FCBE9 0x73C6 +0x8FCBEA 0x73C9 +0x8FCBEB 0x73CB +0x8FCBEC 0x73CC +0x8FCBED 0x73CF +0x8FCBEE 0x73D2 +0x8FCBEF 0x73D3 +0x8FCBF0 0x73D6 +0x8FCBF1 0x73D9 +0x8FCBF2 0x73DD +0x8FCBF3 0x73E1 +0x8FCBF4 0x73E3 +0x8FCBF5 0x73E6 +0x8FCBF6 0x73E7 +0x8FCBF7 0x73E9 +0x8FCBF8 0x73F4 +0x8FCBF9 0x73F5 +0x8FCBFA 0x73F7 +0x8FCBFB 0x73F9 +0x8FCBFC 0x73FA +0x8FCBFD 0x73FB +0x8FCBFE 0x73FD +0x8FCCA1 0x73FF +0x8FCCA2 0x7400 +0x8FCCA3 0x7401 +0x8FCCA4 0x7404 +0x8FCCA5 0x7407 +0x8FCCA6 0x740A +0x8FCCA7 0x7411 +0x8FCCA8 0x741A +0x8FCCA9 0x741B +0x8FCCAA 0x7424 +0x8FCCAB 0x7426 +0x8FCCAC 0x7428 +0x8FCCAD 0x7429 +0x8FCCAE 0x742A +0x8FCCAF 0x742B +0x8FCCB0 0x742C +0x8FCCB1 0x742D +0x8FCCB2 0x742E +0x8FCCB3 0x742F +0x8FCCB4 0x7430 +0x8FCCB5 0x7431 +0x8FCCB6 0x7439 +0x8FCCB7 0x7440 +0x8FCCB8 0x7443 +0x8FCCB9 0x7444 +0x8FCCBA 0x7446 +0x8FCCBB 0x7447 +0x8FCCBC 0x744B +0x8FCCBD 0x744D +0x8FCCBE 0x7451 +0x8FCCBF 0x7452 +0x8FCCC0 0x7457 +0x8FCCC1 0x745D +0x8FCCC2 0x7462 +0x8FCCC3 0x7466 +0x8FCCC4 0x7467 +0x8FCCC5 0x7468 +0x8FCCC6 0x746B +0x8FCCC7 0x746D +0x8FCCC8 0x746E +0x8FCCC9 0x7471 +0x8FCCCA 0x7472 +0x8FCCCB 0x7480 +0x8FCCCC 0x7481 +0x8FCCCD 0x7485 +0x8FCCCE 0x7486 +0x8FCCCF 0x7487 +0x8FCCD0 0x7489 +0x8FCCD1 0x748F +0x8FCCD2 0x7490 +0x8FCCD3 0x7491 +0x8FCCD4 0x7492 +0x8FCCD5 0x7498 +0x8FCCD6 0x7499 +0x8FCCD7 0x749A +0x8FCCD8 0x749C +0x8FCCD9 0x749F +0x8FCCDA 0x74A0 +0x8FCCDB 0x74A1 +0x8FCCDC 0x74A3 +0x8FCCDD 0x74A6 +0x8FCCDE 0x74A8 +0x8FCCDF 0x74A9 +0x8FCCE0 0x74AA +0x8FCCE1 0x74AB +0x8FCCE2 0x74AE +0x8FCCE3 0x74AF +0x8FCCE4 0x74B1 +0x8FCCE5 0x74B2 +0x8FCCE6 0x74B5 +0x8FCCE7 0x74B9 +0x8FCCE8 0x74BB +0x8FCCE9 0x74BF +0x8FCCEA 0x74C8 +0x8FCCEB 0x74C9 +0x8FCCEC 0x74CC +0x8FCCED 0x74D0 +0x8FCCEE 0x74D3 +0x8FCCEF 0x74D8 +0x8FCCF0 0x74DA +0x8FCCF1 0x74DB +0x8FCCF2 0x74DE +0x8FCCF3 0x74DF +0x8FCCF4 0x74E4 +0x8FCCF5 0x74E8 +0x8FCCF6 0x74EA +0x8FCCF7 0x74EB +0x8FCCF8 0x74EF +0x8FCCF9 0x74F4 +0x8FCCFA 0x74FA +0x8FCCFB 0x74FB +0x8FCCFC 0x74FC +0x8FCCFD 0x74FF +0x8FCCFE 0x7506 +0x8FCDA1 0x7512 +0x8FCDA2 0x7516 +0x8FCDA3 0x7517 +0x8FCDA4 0x7520 +0x8FCDA5 0x7521 +0x8FCDA6 0x7524 +0x8FCDA7 0x7527 +0x8FCDA8 0x7529 +0x8FCDA9 0x752A +0x8FCDAA 0x752F +0x8FCDAB 0x7536 +0x8FCDAC 0x7539 +0x8FCDAD 0x753D +0x8FCDAE 0x753E +0x8FCDAF 0x753F +0x8FCDB0 0x7540 +0x8FCDB1 0x7543 +0x8FCDB2 0x7547 +0x8FCDB3 0x7548 +0x8FCDB4 0x754E +0x8FCDB5 0x7550 +0x8FCDB6 0x7552 +0x8FCDB7 0x7557 +0x8FCDB8 0x755E +0x8FCDB9 0x755F +0x8FCDBA 0x7561 +0x8FCDBB 0x756F +0x8FCDBC 0x7571 +0x8FCDBD 0x7579 +0x8FCDBE 0x757A +0x8FCDBF 0x757B +0x8FCDC0 0x757C +0x8FCDC1 0x757D +0x8FCDC2 0x757E +0x8FCDC3 0x7581 +0x8FCDC4 0x7585 +0x8FCDC5 0x7590 +0x8FCDC6 0x7592 +0x8FCDC7 0x7593 +0x8FCDC8 0x7595 +0x8FCDC9 0x7599 +0x8FCDCA 0x759C +0x8FCDCB 0x75A2 +0x8FCDCC 0x75A4 +0x8FCDCD 0x75B4 +0x8FCDCE 0x75BA +0x8FCDCF 0x75BF +0x8FCDD0 0x75C0 +0x8FCDD1 0x75C1 +0x8FCDD2 0x75C4 +0x8FCDD3 0x75C6 +0x8FCDD4 0x75CC +0x8FCDD5 0x75CE +0x8FCDD6 0x75CF +0x8FCDD7 0x75D7 +0x8FCDD8 0x75DC +0x8FCDD9 0x75DF +0x8FCDDA 0x75E0 +0x8FCDDB 0x75E1 +0x8FCDDC 0x75E4 +0x8FCDDD 0x75E7 +0x8FCDDE 0x75EC +0x8FCDDF 0x75EE +0x8FCDE0 0x75EF +0x8FCDE1 0x75F1 +0x8FCDE2 0x75F9 +0x8FCDE3 0x7600 +0x8FCDE4 0x7602 +0x8FCDE5 0x7603 +0x8FCDE6 0x7604 +0x8FCDE7 0x7607 +0x8FCDE8 0x7608 +0x8FCDE9 0x760A +0x8FCDEA 0x760C +0x8FCDEB 0x760F +0x8FCDEC 0x7612 +0x8FCDED 0x7613 +0x8FCDEE 0x7615 +0x8FCDEF 0x7616 +0x8FCDF0 0x7619 +0x8FCDF1 0x761B +0x8FCDF2 0x761C +0x8FCDF3 0x761D +0x8FCDF4 0x761E +0x8FCDF5 0x7623 +0x8FCDF6 0x7625 +0x8FCDF7 0x7626 +0x8FCDF8 0x7629 +0x8FCDF9 0x762D +0x8FCDFA 0x7632 +0x8FCDFB 0x7633 +0x8FCDFC 0x7635 +0x8FCDFD 0x7638 +0x8FCDFE 0x7639 +0x8FCEA1 0x763A +0x8FCEA2 0x763C +0x8FCEA3 0x764A +0x8FCEA4 0x7640 +0x8FCEA5 0x7641 +0x8FCEA6 0x7643 +0x8FCEA7 0x7644 +0x8FCEA8 0x7645 +0x8FCEA9 0x7649 +0x8FCEAA 0x764B +0x8FCEAB 0x7655 +0x8FCEAC 0x7659 +0x8FCEAD 0x765F +0x8FCEAE 0x7664 +0x8FCEAF 0x7665 +0x8FCEB0 0x766D +0x8FCEB1 0x766E +0x8FCEB2 0x766F +0x8FCEB3 0x7671 +0x8FCEB4 0x7674 +0x8FCEB5 0x7681 +0x8FCEB6 0x7685 +0x8FCEB7 0x768C +0x8FCEB8 0x768D +0x8FCEB9 0x7695 +0x8FCEBA 0x769B +0x8FCEBB 0x769C +0x8FCEBC 0x769D +0x8FCEBD 0x769F +0x8FCEBE 0x76A0 +0x8FCEBF 0x76A2 +0x8FCEC0 0x76A3 +0x8FCEC1 0x76A4 +0x8FCEC2 0x76A5 +0x8FCEC3 0x76A6 +0x8FCEC4 0x76A7 +0x8FCEC5 0x76A8 +0x8FCEC6 0x76AA +0x8FCEC7 0x76AD +0x8FCEC8 0x76BD +0x8FCEC9 0x76C1 +0x8FCECA 0x76C5 +0x8FCECB 0x76C9 +0x8FCECC 0x76CB +0x8FCECD 0x76CC +0x8FCECE 0x76CE +0x8FCECF 0x76D4 +0x8FCED0 0x76D9 +0x8FCED1 0x76E0 +0x8FCED2 0x76E6 +0x8FCED3 0x76E8 +0x8FCED4 0x76EC +0x8FCED5 0x76F0 +0x8FCED6 0x76F1 +0x8FCED7 0x76F6 +0x8FCED8 0x76F9 +0x8FCED9 0x76FC +0x8FCEDA 0x7700 +0x8FCEDB 0x7706 +0x8FCEDC 0x770A +0x8FCEDD 0x770E +0x8FCEDE 0x7712 +0x8FCEDF 0x7714 +0x8FCEE0 0x7715 +0x8FCEE1 0x7717 +0x8FCEE2 0x7719 +0x8FCEE3 0x771A +0x8FCEE4 0x771C +0x8FCEE5 0x7722 +0x8FCEE6 0x7728 +0x8FCEE7 0x772D +0x8FCEE8 0x772E +0x8FCEE9 0x772F +0x8FCEEA 0x7734 +0x8FCEEB 0x7735 +0x8FCEEC 0x7736 +0x8FCEED 0x7739 +0x8FCEEE 0x773D +0x8FCEEF 0x773E +0x8FCEF0 0x7742 +0x8FCEF1 0x7745 +0x8FCEF2 0x7746 +0x8FCEF3 0x774A +0x8FCEF4 0x774D +0x8FCEF5 0x774E +0x8FCEF6 0x774F +0x8FCEF7 0x7752 +0x8FCEF8 0x7756 +0x8FCEF9 0x7757 +0x8FCEFA 0x775C +0x8FCEFB 0x775E +0x8FCEFC 0x775F +0x8FCEFD 0x7760 +0x8FCEFE 0x7762 +0x8FCFA1 0x7764 +0x8FCFA2 0x7767 +0x8FCFA3 0x776A +0x8FCFA4 0x776C +0x8FCFA5 0x7770 +0x8FCFA6 0x7772 +0x8FCFA7 0x7773 +0x8FCFA8 0x7774 +0x8FCFA9 0x777A +0x8FCFAA 0x777D +0x8FCFAB 0x7780 +0x8FCFAC 0x7784 +0x8FCFAD 0x778C +0x8FCFAE 0x778D +0x8FCFAF 0x7794 +0x8FCFB0 0x7795 +0x8FCFB1 0x7796 +0x8FCFB2 0x779A +0x8FCFB3 0x779F +0x8FCFB4 0x77A2 +0x8FCFB5 0x77A7 +0x8FCFB6 0x77AA +0x8FCFB7 0x77AE +0x8FCFB8 0x77AF +0x8FCFB9 0x77B1 +0x8FCFBA 0x77B5 +0x8FCFBB 0x77BE +0x8FCFBC 0x77C3 +0x8FCFBD 0x77C9 +0x8FCFBE 0x77D1 +0x8FCFBF 0x77D2 +0x8FCFC0 0x77D5 +0x8FCFC1 0x77D9 +0x8FCFC2 0x77DE +0x8FCFC3 0x77DF +0x8FCFC4 0x77E0 +0x8FCFC5 0x77E4 +0x8FCFC6 0x77E6 +0x8FCFC7 0x77EA +0x8FCFC8 0x77EC +0x8FCFC9 0x77F0 +0x8FCFCA 0x77F1 +0x8FCFCB 0x77F4 +0x8FCFCC 0x77F8 +0x8FCFCD 0x77FB +0x8FCFCE 0x7805 +0x8FCFCF 0x7806 +0x8FCFD0 0x7809 +0x8FCFD1 0x780D +0x8FCFD2 0x780E +0x8FCFD3 0x7811 +0x8FCFD4 0x781D +0x8FCFD5 0x7821 +0x8FCFD6 0x7822 +0x8FCFD7 0x7823 +0x8FCFD8 0x782D +0x8FCFD9 0x782E +0x8FCFDA 0x7830 +0x8FCFDB 0x7835 +0x8FCFDC 0x7837 +0x8FCFDD 0x7843 +0x8FCFDE 0x7844 +0x8FCFDF 0x7847 +0x8FCFE0 0x7848 +0x8FCFE1 0x784C +0x8FCFE2 0x784E +0x8FCFE3 0x7852 +0x8FCFE4 0x785C +0x8FCFE5 0x785E +0x8FCFE6 0x7860 +0x8FCFE7 0x7861 +0x8FCFE8 0x7863 +0x8FCFE9 0x7864 +0x8FCFEA 0x7868 +0x8FCFEB 0x786A +0x8FCFEC 0x786E +0x8FCFED 0x787A +0x8FCFEE 0x787E +0x8FCFEF 0x788A +0x8FCFF0 0x788F +0x8FCFF1 0x7894 +0x8FCFF2 0x7898 +0x8FCFF3 0x78A1 +0x8FCFF4 0x789D +0x8FCFF5 0x789E +0x8FCFF6 0x789F +0x8FCFF7 0x78A4 +0x8FCFF8 0x78A8 +0x8FCFF9 0x78AC +0x8FCFFA 0x78AD +0x8FCFFB 0x78B0 +0x8FCFFC 0x78B1 +0x8FCFFD 0x78B2 +0x8FCFFE 0x78B3 +0x8FD0A1 0x78BB +0x8FD0A2 0x78BD +0x8FD0A3 0x78BF +0x8FD0A4 0x78C7 +0x8FD0A5 0x78C8 +0x8FD0A6 0x78C9 +0x8FD0A7 0x78CC +0x8FD0A8 0x78CE +0x8FD0A9 0x78D2 +0x8FD0AA 0x78D3 +0x8FD0AB 0x78D5 +0x8FD0AC 0x78D6 +0x8FD0AD 0x78E4 +0x8FD0AE 0x78DB +0x8FD0AF 0x78DF +0x8FD0B0 0x78E0 +0x8FD0B1 0x78E1 +0x8FD0B2 0x78E6 +0x8FD0B3 0x78EA +0x8FD0B4 0x78F2 +0x8FD0B5 0x78F3 +0x8FD0B6 0x7900 +0x8FD0B7 0x78F6 +0x8FD0B8 0x78F7 +0x8FD0B9 0x78FA +0x8FD0BA 0x78FB +0x8FD0BB 0x78FF +0x8FD0BC 0x7906 +0x8FD0BD 0x790C +0x8FD0BE 0x7910 +0x8FD0BF 0x791A +0x8FD0C0 0x791C +0x8FD0C1 0x791E +0x8FD0C2 0x791F +0x8FD0C3 0x7920 +0x8FD0C4 0x7925 +0x8FD0C5 0x7927 +0x8FD0C6 0x7929 +0x8FD0C7 0x792D +0x8FD0C8 0x7931 +0x8FD0C9 0x7934 +0x8FD0CA 0x7935 +0x8FD0CB 0x793B +0x8FD0CC 0x793D +0x8FD0CD 0x793F +0x8FD0CE 0x7944 +0x8FD0CF 0x7945 +0x8FD0D0 0x7946 +0x8FD0D1 0x794A +0x8FD0D2 0x794B +0x8FD0D3 0x794F +0x8FD0D4 0x7951 +0x8FD0D5 0x7954 +0x8FD0D6 0x7958 +0x8FD0D7 0x795B +0x8FD0D8 0x795C +0x8FD0D9 0x7967 +0x8FD0DA 0x7969 +0x8FD0DB 0x796B +0x8FD0DC 0x7972 +0x8FD0DD 0x7979 +0x8FD0DE 0x797B +0x8FD0DF 0x797C +0x8FD0E0 0x797E +0x8FD0E1 0x798B +0x8FD0E2 0x798C +0x8FD0E3 0x7991 +0x8FD0E4 0x7993 +0x8FD0E5 0x7994 +0x8FD0E6 0x7995 +0x8FD0E7 0x7996 +0x8FD0E8 0x7998 +0x8FD0E9 0x799B +0x8FD0EA 0x799C +0x8FD0EB 0x79A1 +0x8FD0EC 0x79A8 +0x8FD0ED 0x79A9 +0x8FD0EE 0x79AB +0x8FD0EF 0x79AF +0x8FD0F0 0x79B1 +0x8FD0F1 0x79B4 +0x8FD0F2 0x79B8 +0x8FD0F3 0x79BB +0x8FD0F4 0x79C2 +0x8FD0F5 0x79C4 +0x8FD0F6 0x79C7 +0x8FD0F7 0x79C8 +0x8FD0F8 0x79CA +0x8FD0F9 0x79CF +0x8FD0FA 0x79D4 +0x8FD0FB 0x79D6 +0x8FD0FC 0x79DA +0x8FD0FD 0x79DD +0x8FD0FE 0x79DE +0x8FD1A1 0x79E0 +0x8FD1A2 0x79E2 +0x8FD1A3 0x79E5 +0x8FD1A4 0x79EA +0x8FD1A5 0x79EB +0x8FD1A6 0x79ED +0x8FD1A7 0x79F1 +0x8FD1A8 0x79F8 +0x8FD1A9 0x79FC +0x8FD1AA 0x7A02 +0x8FD1AB 0x7A03 +0x8FD1AC 0x7A07 +0x8FD1AD 0x7A09 +0x8FD1AE 0x7A0A +0x8FD1AF 0x7A0C +0x8FD1B0 0x7A11 +0x8FD1B1 0x7A15 +0x8FD1B2 0x7A1B +0x8FD1B3 0x7A1E +0x8FD1B4 0x7A21 +0x8FD1B5 0x7A27 +0x8FD1B6 0x7A2B +0x8FD1B7 0x7A2D +0x8FD1B8 0x7A2F +0x8FD1B9 0x7A30 +0x8FD1BA 0x7A34 +0x8FD1BB 0x7A35 +0x8FD1BC 0x7A38 +0x8FD1BD 0x7A39 +0x8FD1BE 0x7A3A +0x8FD1BF 0x7A44 +0x8FD1C0 0x7A45 +0x8FD1C1 0x7A47 +0x8FD1C2 0x7A48 +0x8FD1C3 0x7A4C +0x8FD1C4 0x7A55 +0x8FD1C5 0x7A56 +0x8FD1C6 0x7A59 +0x8FD1C7 0x7A5C +0x8FD1C8 0x7A5D +0x8FD1C9 0x7A5F +0x8FD1CA 0x7A60 +0x8FD1CB 0x7A65 +0x8FD1CC 0x7A67 +0x8FD1CD 0x7A6A +0x8FD1CE 0x7A6D +0x8FD1CF 0x7A75 +0x8FD1D0 0x7A78 +0x8FD1D1 0x7A7E +0x8FD1D2 0x7A80 +0x8FD1D3 0x7A82 +0x8FD1D4 0x7A85 +0x8FD1D5 0x7A86 +0x8FD1D6 0x7A8A +0x8FD1D7 0x7A8B +0x8FD1D8 0x7A90 +0x8FD1D9 0x7A91 +0x8FD1DA 0x7A94 +0x8FD1DB 0x7A9E +0x8FD1DC 0x7AA0 +0x8FD1DD 0x7AA3 +0x8FD1DE 0x7AAC +0x8FD1DF 0x7AB3 +0x8FD1E0 0x7AB5 +0x8FD1E1 0x7AB9 +0x8FD1E2 0x7ABB +0x8FD1E3 0x7ABC +0x8FD1E4 0x7AC6 +0x8FD1E5 0x7AC9 +0x8FD1E6 0x7ACC +0x8FD1E7 0x7ACE +0x8FD1E8 0x7AD1 +0x8FD1E9 0x7ADB +0x8FD1EA 0x7AE8 +0x8FD1EB 0x7AE9 +0x8FD1EC 0x7AEB +0x8FD1ED 0x7AEC +0x8FD1EE 0x7AF1 +0x8FD1EF 0x7AF4 +0x8FD1F0 0x7AFB +0x8FD1F1 0x7AFD +0x8FD1F2 0x7AFE +0x8FD1F3 0x7B07 +0x8FD1F4 0x7B14 +0x8FD1F5 0x7B1F +0x8FD1F6 0x7B23 +0x8FD1F7 0x7B27 +0x8FD1F8 0x7B29 +0x8FD1F9 0x7B2A +0x8FD1FA 0x7B2B +0x8FD1FB 0x7B2D +0x8FD1FC 0x7B2E +0x8FD1FD 0x7B2F +0x8FD1FE 0x7B30 +0x8FD2A1 0x7B31 +0x8FD2A2 0x7B34 +0x8FD2A3 0x7B3D +0x8FD2A4 0x7B3F +0x8FD2A5 0x7B40 +0x8FD2A6 0x7B41 +0x8FD2A7 0x7B47 +0x8FD2A8 0x7B4E +0x8FD2A9 0x7B55 +0x8FD2AA 0x7B60 +0x8FD2AB 0x7B64 +0x8FD2AC 0x7B66 +0x8FD2AD 0x7B69 +0x8FD2AE 0x7B6A +0x8FD2AF 0x7B6D +0x8FD2B0 0x7B6F +0x8FD2B1 0x7B72 +0x8FD2B2 0x7B73 +0x8FD2B3 0x7B77 +0x8FD2B4 0x7B84 +0x8FD2B5 0x7B89 +0x8FD2B6 0x7B8E +0x8FD2B7 0x7B90 +0x8FD2B8 0x7B91 +0x8FD2B9 0x7B96 +0x8FD2BA 0x7B9B +0x8FD2BB 0x7B9E +0x8FD2BC 0x7BA0 +0x8FD2BD 0x7BA5 +0x8FD2BE 0x7BAC +0x8FD2BF 0x7BAF +0x8FD2C0 0x7BB0 +0x8FD2C1 0x7BB2 +0x8FD2C2 0x7BB5 +0x8FD2C3 0x7BB6 +0x8FD2C4 0x7BBA +0x8FD2C5 0x7BBB +0x8FD2C6 0x7BBC +0x8FD2C7 0x7BBD +0x8FD2C8 0x7BC2 +0x8FD2C9 0x7BC5 +0x8FD2CA 0x7BC8 +0x8FD2CB 0x7BCA +0x8FD2CC 0x7BD4 +0x8FD2CD 0x7BD6 +0x8FD2CE 0x7BD7 +0x8FD2CF 0x7BD9 +0x8FD2D0 0x7BDA +0x8FD2D1 0x7BDB +0x8FD2D2 0x7BE8 +0x8FD2D3 0x7BEA +0x8FD2D4 0x7BF2 +0x8FD2D5 0x7BF4 +0x8FD2D6 0x7BF5 +0x8FD2D7 0x7BF8 +0x8FD2D8 0x7BF9 +0x8FD2D9 0x7BFA +0x8FD2DA 0x7BFC +0x8FD2DB 0x7BFE +0x8FD2DC 0x7C01 +0x8FD2DD 0x7C02 +0x8FD2DE 0x7C03 +0x8FD2DF 0x7C04 +0x8FD2E0 0x7C06 +0x8FD2E1 0x7C09 +0x8FD2E2 0x7C0B +0x8FD2E3 0x7C0C +0x8FD2E4 0x7C0E +0x8FD2E5 0x7C0F +0x8FD2E6 0x7C19 +0x8FD2E7 0x7C1B +0x8FD2E8 0x7C20 +0x8FD2E9 0x7C25 +0x8FD2EA 0x7C26 +0x8FD2EB 0x7C28 +0x8FD2EC 0x7C2C +0x8FD2ED 0x7C31 +0x8FD2EE 0x7C33 +0x8FD2EF 0x7C34 +0x8FD2F0 0x7C36 +0x8FD2F1 0x7C39 +0x8FD2F2 0x7C3A +0x8FD2F3 0x7C46 +0x8FD2F4 0x7C4A +0x8FD2F5 0x7C55 +0x8FD2F6 0x7C51 +0x8FD2F7 0x7C52 +0x8FD2F8 0x7C53 +0x8FD2F9 0x7C59 +0x8FD2FA 0x7C5A +0x8FD2FB 0x7C5B +0x8FD2FC 0x7C5C +0x8FD2FD 0x7C5D +0x8FD2FE 0x7C5E +0x8FD3A1 0x7C61 +0x8FD3A2 0x7C63 +0x8FD3A3 0x7C67 +0x8FD3A4 0x7C69 +0x8FD3A5 0x7C6D +0x8FD3A6 0x7C6E +0x8FD3A7 0x7C70 +0x8FD3A8 0x7C72 +0x8FD3A9 0x7C79 +0x8FD3AA 0x7C7C +0x8FD3AB 0x7C7D +0x8FD3AC 0x7C86 +0x8FD3AD 0x7C87 +0x8FD3AE 0x7C8F +0x8FD3AF 0x7C94 +0x8FD3B0 0x7C9E +0x8FD3B1 0x7CA0 +0x8FD3B2 0x7CA6 +0x8FD3B3 0x7CB0 +0x8FD3B4 0x7CB6 +0x8FD3B5 0x7CB7 +0x8FD3B6 0x7CBA +0x8FD3B7 0x7CBB +0x8FD3B8 0x7CBC +0x8FD3B9 0x7CBF +0x8FD3BA 0x7CC4 +0x8FD3BB 0x7CC7 +0x8FD3BC 0x7CC8 +0x8FD3BD 0x7CC9 +0x8FD3BE 0x7CCD +0x8FD3BF 0x7CCF +0x8FD3C0 0x7CD3 +0x8FD3C1 0x7CD4 +0x8FD3C2 0x7CD5 +0x8FD3C3 0x7CD7 +0x8FD3C4 0x7CD9 +0x8FD3C5 0x7CDA +0x8FD3C6 0x7CDD +0x8FD3C7 0x7CE6 +0x8FD3C8 0x7CE9 +0x8FD3C9 0x7CEB +0x8FD3CA 0x7CF5 +0x8FD3CB 0x7D03 +0x8FD3CC 0x7D07 +0x8FD3CD 0x7D08 +0x8FD3CE 0x7D09 +0x8FD3CF 0x7D0F +0x8FD3D0 0x7D11 +0x8FD3D1 0x7D12 +0x8FD3D2 0x7D13 +0x8FD3D3 0x7D16 +0x8FD3D4 0x7D1D +0x8FD3D5 0x7D1E +0x8FD3D6 0x7D23 +0x8FD3D7 0x7D26 +0x8FD3D8 0x7D2A +0x8FD3D9 0x7D2D +0x8FD3DA 0x7D31 +0x8FD3DB 0x7D3C +0x8FD3DC 0x7D3D +0x8FD3DD 0x7D3E +0x8FD3DE 0x7D40 +0x8FD3DF 0x7D41 +0x8FD3E0 0x7D47 +0x8FD3E1 0x7D48 +0x8FD3E2 0x7D4D +0x8FD3E3 0x7D51 +0x8FD3E4 0x7D53 +0x8FD3E5 0x7D57 +0x8FD3E6 0x7D59 +0x8FD3E7 0x7D5A +0x8FD3E8 0x7D5C +0x8FD3E9 0x7D5D +0x8FD3EA 0x7D65 +0x8FD3EB 0x7D67 +0x8FD3EC 0x7D6A +0x8FD3ED 0x7D70 +0x8FD3EE 0x7D78 +0x8FD3EF 0x7D7A +0x8FD3F0 0x7D7B +0x8FD3F1 0x7D7F +0x8FD3F2 0x7D81 +0x8FD3F3 0x7D82 +0x8FD3F4 0x7D83 +0x8FD3F5 0x7D85 +0x8FD3F6 0x7D86 +0x8FD3F7 0x7D88 +0x8FD3F8 0x7D8B +0x8FD3F9 0x7D8C +0x8FD3FA 0x7D8D +0x8FD3FB 0x7D91 +0x8FD3FC 0x7D96 +0x8FD3FD 0x7D97 +0x8FD3FE 0x7D9D +0x8FD4A1 0x7D9E +0x8FD4A2 0x7DA6 +0x8FD4A3 0x7DA7 +0x8FD4A4 0x7DAA +0x8FD4A5 0x7DB3 +0x8FD4A6 0x7DB6 +0x8FD4A7 0x7DB7 +0x8FD4A8 0x7DB9 +0x8FD4A9 0x7DC2 +0x8FD4AA 0x7DC3 +0x8FD4AB 0x7DC4 +0x8FD4AC 0x7DC5 +0x8FD4AD 0x7DC6 +0x8FD4AE 0x7DCC +0x8FD4AF 0x7DCD +0x8FD4B0 0x7DCE +0x8FD4B1 0x7DD7 +0x8FD4B2 0x7DD9 +0x8FD4B3 0x7E00 +0x8FD4B4 0x7DE2 +0x8FD4B5 0x7DE5 +0x8FD4B6 0x7DE6 +0x8FD4B7 0x7DEA +0x8FD4B8 0x7DEB +0x8FD4B9 0x7DED +0x8FD4BA 0x7DF1 +0x8FD4BB 0x7DF5 +0x8FD4BC 0x7DF6 +0x8FD4BD 0x7DF9 +0x8FD4BE 0x7DFA +0x8FD4BF 0x7E08 +0x8FD4C0 0x7E10 +0x8FD4C1 0x7E11 +0x8FD4C2 0x7E15 +0x8FD4C3 0x7E17 +0x8FD4C4 0x7E1C +0x8FD4C5 0x7E1D +0x8FD4C6 0x7E20 +0x8FD4C7 0x7E27 +0x8FD4C8 0x7E28 +0x8FD4C9 0x7E2C +0x8FD4CA 0x7E2D +0x8FD4CB 0x7E2F +0x8FD4CC 0x7E33 +0x8FD4CD 0x7E36 +0x8FD4CE 0x7E3F +0x8FD4CF 0x7E44 +0x8FD4D0 0x7E45 +0x8FD4D1 0x7E47 +0x8FD4D2 0x7E4E +0x8FD4D3 0x7E50 +0x8FD4D4 0x7E52 +0x8FD4D5 0x7E58 +0x8FD4D6 0x7E5F +0x8FD4D7 0x7E61 +0x8FD4D8 0x7E62 +0x8FD4D9 0x7E65 +0x8FD4DA 0x7E6B +0x8FD4DB 0x7E6E +0x8FD4DC 0x7E6F +0x8FD4DD 0x7E73 +0x8FD4DE 0x7E78 +0x8FD4DF 0x7E7E +0x8FD4E0 0x7E81 +0x8FD4E1 0x7E86 +0x8FD4E2 0x7E87 +0x8FD4E3 0x7E8A +0x8FD4E4 0x7E8D +0x8FD4E5 0x7E91 +0x8FD4E6 0x7E95 +0x8FD4E7 0x7E98 +0x8FD4E8 0x7E9A +0x8FD4E9 0x7E9D +0x8FD4EA 0x7E9E +0x8FD4EB 0x7F3C +0x8FD4EC 0x7F3B +0x8FD4ED 0x7F3D +0x8FD4EE 0x7F3E +0x8FD4EF 0x7F3F +0x8FD4F0 0x7F43 +0x8FD4F1 0x7F44 +0x8FD4F2 0x7F47 +0x8FD4F3 0x7F4F +0x8FD4F4 0x7F52 +0x8FD4F5 0x7F53 +0x8FD4F6 0x7F5B +0x8FD4F7 0x7F5C +0x8FD4F8 0x7F5D +0x8FD4F9 0x7F61 +0x8FD4FA 0x7F63 +0x8FD4FB 0x7F64 +0x8FD4FC 0x7F65 +0x8FD4FD 0x7F66 +0x8FD4FE 0x7F6D +0x8FD5A1 0x7F71 +0x8FD5A2 0x7F7D +0x8FD5A3 0x7F7E +0x8FD5A4 0x7F7F +0x8FD5A5 0x7F80 +0x8FD5A6 0x7F8B +0x8FD5A7 0x7F8D +0x8FD5A8 0x7F8F +0x8FD5A9 0x7F90 +0x8FD5AA 0x7F91 +0x8FD5AB 0x7F96 +0x8FD5AC 0x7F97 +0x8FD5AD 0x7F9C +0x8FD5AE 0x7FA1 +0x8FD5AF 0x7FA2 +0x8FD5B0 0x7FA6 +0x8FD5B1 0x7FAA +0x8FD5B2 0x7FAD +0x8FD5B3 0x7FB4 +0x8FD5B4 0x7FBC +0x8FD5B5 0x7FBF +0x8FD5B6 0x7FC0 +0x8FD5B7 0x7FC3 +0x8FD5B8 0x7FC8 +0x8FD5B9 0x7FCE +0x8FD5BA 0x7FCF +0x8FD5BB 0x7FDB +0x8FD5BC 0x7FDF +0x8FD5BD 0x7FE3 +0x8FD5BE 0x7FE5 +0x8FD5BF 0x7FE8 +0x8FD5C0 0x7FEC +0x8FD5C1 0x7FEE +0x8FD5C2 0x7FEF +0x8FD5C3 0x7FF2 +0x8FD5C4 0x7FFA +0x8FD5C5 0x7FFD +0x8FD5C6 0x7FFE +0x8FD5C7 0x7FFF +0x8FD5C8 0x8007 +0x8FD5C9 0x8008 +0x8FD5CA 0x800A +0x8FD5CB 0x800D +0x8FD5CC 0x800E +0x8FD5CD 0x800F +0x8FD5CE 0x8011 +0x8FD5CF 0x8013 +0x8FD5D0 0x8014 +0x8FD5D1 0x8016 +0x8FD5D2 0x801D +0x8FD5D3 0x801E +0x8FD5D4 0x801F +0x8FD5D5 0x8020 +0x8FD5D6 0x8024 +0x8FD5D7 0x8026 +0x8FD5D8 0x802C +0x8FD5D9 0x802E +0x8FD5DA 0x8030 +0x8FD5DB 0x8034 +0x8FD5DC 0x8035 +0x8FD5DD 0x8037 +0x8FD5DE 0x8039 +0x8FD5DF 0x803A +0x8FD5E0 0x803C +0x8FD5E1 0x803E +0x8FD5E2 0x8040 +0x8FD5E3 0x8044 +0x8FD5E4 0x8060 +0x8FD5E5 0x8064 +0x8FD5E6 0x8066 +0x8FD5E7 0x806D +0x8FD5E8 0x8071 +0x8FD5E9 0x8075 +0x8FD5EA 0x8081 +0x8FD5EB 0x8088 +0x8FD5EC 0x808E +0x8FD5ED 0x809C +0x8FD5EE 0x809E +0x8FD5EF 0x80A6 +0x8FD5F0 0x80A7 +0x8FD5F1 0x80AB +0x8FD5F2 0x80B8 +0x8FD5F3 0x80B9 +0x8FD5F4 0x80C8 +0x8FD5F5 0x80CD +0x8FD5F6 0x80CF +0x8FD5F7 0x80D2 +0x8FD5F8 0x80D4 +0x8FD5F9 0x80D5 +0x8FD5FA 0x80D7 +0x8FD5FB 0x80D8 +0x8FD5FC 0x80E0 +0x8FD5FD 0x80ED +0x8FD5FE 0x80EE +0x8FD6A1 0x80F0 +0x8FD6A2 0x80F2 +0x8FD6A3 0x80F3 +0x8FD6A4 0x80F6 +0x8FD6A5 0x80F9 +0x8FD6A6 0x80FA +0x8FD6A7 0x80FE +0x8FD6A8 0x8103 +0x8FD6A9 0x810B +0x8FD6AA 0x8116 +0x8FD6AB 0x8117 +0x8FD6AC 0x8118 +0x8FD6AD 0x811C +0x8FD6AE 0x811E +0x8FD6AF 0x8120 +0x8FD6B0 0x8124 +0x8FD6B1 0x8127 +0x8FD6B2 0x812C +0x8FD6B3 0x8130 +0x8FD6B4 0x8135 +0x8FD6B5 0x813A +0x8FD6B6 0x813C +0x8FD6B7 0x8145 +0x8FD6B8 0x8147 +0x8FD6B9 0x814A +0x8FD6BA 0x814C +0x8FD6BB 0x8152 +0x8FD6BC 0x8157 +0x8FD6BD 0x8160 +0x8FD6BE 0x8161 +0x8FD6BF 0x8167 +0x8FD6C0 0x8168 +0x8FD6C1 0x8169 +0x8FD6C2 0x816D +0x8FD6C3 0x816F +0x8FD6C4 0x8177 +0x8FD6C5 0x8181 +0x8FD6C6 0x8190 +0x8FD6C7 0x8184 +0x8FD6C8 0x8185 +0x8FD6C9 0x8186 +0x8FD6CA 0x818B +0x8FD6CB 0x818E +0x8FD6CC 0x8196 +0x8FD6CD 0x8198 +0x8FD6CE 0x819B +0x8FD6CF 0x819E +0x8FD6D0 0x81A2 +0x8FD6D1 0x81AE +0x8FD6D2 0x81B2 +0x8FD6D3 0x81B4 +0x8FD6D4 0x81BB +0x8FD6D5 0x81CB +0x8FD6D6 0x81C3 +0x8FD6D7 0x81C5 +0x8FD6D8 0x81CA +0x8FD6D9 0x81CE +0x8FD6DA 0x81CF +0x8FD6DB 0x81D5 +0x8FD6DC 0x81D7 +0x8FD6DD 0x81DB +0x8FD6DE 0x81DD +0x8FD6DF 0x81DE +0x8FD6E0 0x81E1 +0x8FD6E1 0x81E4 +0x8FD6E2 0x81EB +0x8FD6E3 0x81EC +0x8FD6E4 0x81F0 +0x8FD6E5 0x81F1 +0x8FD6E6 0x81F2 +0x8FD6E7 0x81F5 +0x8FD6E8 0x81F6 +0x8FD6E9 0x81F8 +0x8FD6EA 0x81F9 +0x8FD6EB 0x81FD +0x8FD6EC 0x81FF +0x8FD6ED 0x8200 +0x8FD6EE 0x8203 +0x8FD6EF 0x820F +0x8FD6F0 0x8213 +0x8FD6F1 0x8214 +0x8FD6F2 0x8219 +0x8FD6F3 0x821A +0x8FD6F4 0x821D +0x8FD6F5 0x8221 +0x8FD6F6 0x8222 +0x8FD6F7 0x8228 +0x8FD6F8 0x8232 +0x8FD6F9 0x8234 +0x8FD6FA 0x823A +0x8FD6FB 0x8243 +0x8FD6FC 0x8244 +0x8FD6FD 0x8245 +0x8FD6FE 0x8246 +0x8FD7A1 0x824B +0x8FD7A2 0x824E +0x8FD7A3 0x824F +0x8FD7A4 0x8251 +0x8FD7A5 0x8256 +0x8FD7A6 0x825C +0x8FD7A7 0x8260 +0x8FD7A8 0x8263 +0x8FD7A9 0x8267 +0x8FD7AA 0x826D +0x8FD7AB 0x8274 +0x8FD7AC 0x827B +0x8FD7AD 0x827D +0x8FD7AE 0x827F +0x8FD7AF 0x8280 +0x8FD7B0 0x8281 +0x8FD7B1 0x8283 +0x8FD7B2 0x8284 +0x8FD7B3 0x8287 +0x8FD7B4 0x8289 +0x8FD7B5 0x828A +0x8FD7B6 0x828E +0x8FD7B7 0x8291 +0x8FD7B8 0x8294 +0x8FD7B9 0x8296 +0x8FD7BA 0x8298 +0x8FD7BB 0x829A +0x8FD7BC 0x829B +0x8FD7BD 0x82A0 +0x8FD7BE 0x82A1 +0x8FD7BF 0x82A3 +0x8FD7C0 0x82A4 +0x8FD7C1 0x82A7 +0x8FD7C2 0x82A8 +0x8FD7C3 0x82A9 +0x8FD7C4 0x82AA +0x8FD7C5 0x82AE +0x8FD7C6 0x82B0 +0x8FD7C7 0x82B2 +0x8FD7C8 0x82B4 +0x8FD7C9 0x82B7 +0x8FD7CA 0x82BA +0x8FD7CB 0x82BC +0x8FD7CC 0x82BE +0x8FD7CD 0x82BF +0x8FD7CE 0x82C6 +0x8FD7CF 0x82D0 +0x8FD7D0 0x82D5 +0x8FD7D1 0x82DA +0x8FD7D2 0x82E0 +0x8FD7D3 0x82E2 +0x8FD7D4 0x82E4 +0x8FD7D5 0x82E8 +0x8FD7D6 0x82EA +0x8FD7D7 0x82ED +0x8FD7D8 0x82EF +0x8FD7D9 0x82F6 +0x8FD7DA 0x82F7 +0x8FD7DB 0x82FD +0x8FD7DC 0x82FE +0x8FD7DD 0x8300 +0x8FD7DE 0x8301 +0x8FD7DF 0x8307 +0x8FD7E0 0x8308 +0x8FD7E1 0x830A +0x8FD7E2 0x830B +0x8FD7E3 0x8354 +0x8FD7E4 0x831B +0x8FD7E5 0x831D +0x8FD7E6 0x831E +0x8FD7E7 0x831F +0x8FD7E8 0x8321 +0x8FD7E9 0x8322 +0x8FD7EA 0x832C +0x8FD7EB 0x832D +0x8FD7EC 0x832E +0x8FD7ED 0x8330 +0x8FD7EE 0x8333 +0x8FD7EF 0x8337 +0x8FD7F0 0x833A +0x8FD7F1 0x833C +0x8FD7F2 0x833D +0x8FD7F3 0x8342 +0x8FD7F4 0x8343 +0x8FD7F5 0x8344 +0x8FD7F6 0x8347 +0x8FD7F7 0x834D +0x8FD7F8 0x834E +0x8FD7F9 0x8351 +0x8FD7FA 0x8355 +0x8FD7FB 0x8356 +0x8FD7FC 0x8357 +0x8FD7FD 0x8370 +0x8FD7FE 0x8378 +0x8FD8A1 0x837D +0x8FD8A2 0x837F +0x8FD8A3 0x8380 +0x8FD8A4 0x8382 +0x8FD8A5 0x8384 +0x8FD8A6 0x8386 +0x8FD8A7 0x838D +0x8FD8A8 0x8392 +0x8FD8A9 0x8394 +0x8FD8AA 0x8395 +0x8FD8AB 0x8398 +0x8FD8AC 0x8399 +0x8FD8AD 0x839B +0x8FD8AE 0x839C +0x8FD8AF 0x839D +0x8FD8B0 0x83A6 +0x8FD8B1 0x83A7 +0x8FD8B2 0x83A9 +0x8FD8B3 0x83AC +0x8FD8B4 0x83BE +0x8FD8B5 0x83BF +0x8FD8B6 0x83C0 +0x8FD8B7 0x83C7 +0x8FD8B8 0x83C9 +0x8FD8B9 0x83CF +0x8FD8BA 0x83D0 +0x8FD8BB 0x83D1 +0x8FD8BC 0x83D4 +0x8FD8BD 0x83DD +0x8FD8BE 0x8353 +0x8FD8BF 0x83E8 +0x8FD8C0 0x83EA +0x8FD8C1 0x83F6 +0x8FD8C2 0x83F8 +0x8FD8C3 0x83F9 +0x8FD8C4 0x83FC +0x8FD8C5 0x8401 +0x8FD8C6 0x8406 +0x8FD8C7 0x840A +0x8FD8C8 0x840F +0x8FD8C9 0x8411 +0x8FD8CA 0x8415 +0x8FD8CB 0x8419 +0x8FD8CC 0x83AD +0x8FD8CD 0x842F +0x8FD8CE 0x8439 +0x8FD8CF 0x8445 +0x8FD8D0 0x8447 +0x8FD8D1 0x8448 +0x8FD8D2 0x844A +0x8FD8D3 0x844D +0x8FD8D4 0x844F +0x8FD8D5 0x8451 +0x8FD8D6 0x8452 +0x8FD8D7 0x8456 +0x8FD8D8 0x8458 +0x8FD8D9 0x8459 +0x8FD8DA 0x845A +0x8FD8DB 0x845C +0x8FD8DC 0x8460 +0x8FD8DD 0x8464 +0x8FD8DE 0x8465 +0x8FD8DF 0x8467 +0x8FD8E0 0x846A +0x8FD8E1 0x8470 +0x8FD8E2 0x8473 +0x8FD8E3 0x8474 +0x8FD8E4 0x8476 +0x8FD8E5 0x8478 +0x8FD8E6 0x847C +0x8FD8E7 0x847D +0x8FD8E8 0x8481 +0x8FD8E9 0x8485 +0x8FD8EA 0x8492 +0x8FD8EB 0x8493 +0x8FD8EC 0x8495 +0x8FD8ED 0x849E +0x8FD8EE 0x84A6 +0x8FD8EF 0x84A8 +0x8FD8F0 0x84A9 +0x8FD8F1 0x84AA +0x8FD8F2 0x84AF +0x8FD8F3 0x84B1 +0x8FD8F4 0x84B4 +0x8FD8F5 0x84BA +0x8FD8F6 0x84BD +0x8FD8F7 0x84BE +0x8FD8F8 0x84C0 +0x8FD8F9 0x84C2 +0x8FD8FA 0x84C7 +0x8FD8FB 0x84C8 +0x8FD8FC 0x84CC +0x8FD8FD 0x84CF +0x8FD8FE 0x84D3 +0x8FD9A1 0x84DC +0x8FD9A2 0x84E7 +0x8FD9A3 0x84EA +0x8FD9A4 0x84EF +0x8FD9A5 0x84F0 +0x8FD9A6 0x84F1 +0x8FD9A7 0x84F2 +0x8FD9A8 0x84F7 +0x8FD9A9 0x8532 +0x8FD9AA 0x84FA +0x8FD9AB 0x84FB +0x8FD9AC 0x84FD +0x8FD9AD 0x8502 +0x8FD9AE 0x8503 +0x8FD9AF 0x8507 +0x8FD9B0 0x850C +0x8FD9B1 0x850E +0x8FD9B2 0x8510 +0x8FD9B3 0x851C +0x8FD9B4 0x851E +0x8FD9B5 0x8522 +0x8FD9B6 0x8523 +0x8FD9B7 0x8524 +0x8FD9B8 0x8525 +0x8FD9B9 0x8527 +0x8FD9BA 0x852A +0x8FD9BB 0x852B +0x8FD9BC 0x852F +0x8FD9BD 0x8533 +0x8FD9BE 0x8534 +0x8FD9BF 0x8536 +0x8FD9C0 0x853F +0x8FD9C1 0x8546 +0x8FD9C2 0x854F +0x8FD9C3 0x8550 +0x8FD9C4 0x8551 +0x8FD9C5 0x8552 +0x8FD9C6 0x8553 +0x8FD9C7 0x8556 +0x8FD9C8 0x8559 +0x8FD9C9 0x855C +0x8FD9CA 0x855D +0x8FD9CB 0x855E +0x8FD9CC 0x855F +0x8FD9CD 0x8560 +0x8FD9CE 0x8561 +0x8FD9CF 0x8562 +0x8FD9D0 0x8564 +0x8FD9D1 0x856B +0x8FD9D2 0x856F +0x8FD9D3 0x8579 +0x8FD9D4 0x857A +0x8FD9D5 0x857B +0x8FD9D6 0x857D +0x8FD9D7 0x857F +0x8FD9D8 0x8581 +0x8FD9D9 0x8585 +0x8FD9DA 0x8586 +0x8FD9DB 0x8589 +0x8FD9DC 0x858B +0x8FD9DD 0x858C +0x8FD9DE 0x858F +0x8FD9DF 0x8593 +0x8FD9E0 0x8598 +0x8FD9E1 0x859D +0x8FD9E2 0x859F +0x8FD9E3 0x85A0 +0x8FD9E4 0x85A2 +0x8FD9E5 0x85A5 +0x8FD9E6 0x85A7 +0x8FD9E7 0x85B4 +0x8FD9E8 0x85B6 +0x8FD9E9 0x85B7 +0x8FD9EA 0x85B8 +0x8FD9EB 0x85BC +0x8FD9EC 0x85BD +0x8FD9ED 0x85BE +0x8FD9EE 0x85BF +0x8FD9EF 0x85C2 +0x8FD9F0 0x85C7 +0x8FD9F1 0x85CA +0x8FD9F2 0x85CB +0x8FD9F3 0x85CE +0x8FD9F4 0x85AD +0x8FD9F5 0x85D8 +0x8FD9F6 0x85DA +0x8FD9F7 0x85DF +0x8FD9F8 0x85E0 +0x8FD9F9 0x85E6 +0x8FD9FA 0x85E8 +0x8FD9FB 0x85ED +0x8FD9FC 0x85F3 +0x8FD9FD 0x85F6 +0x8FD9FE 0x85FC +0x8FDAA1 0x85FF +0x8FDAA2 0x8600 +0x8FDAA3 0x8604 +0x8FDAA4 0x8605 +0x8FDAA5 0x860D +0x8FDAA6 0x860E +0x8FDAA7 0x8610 +0x8FDAA8 0x8611 +0x8FDAA9 0x8612 +0x8FDAAA 0x8618 +0x8FDAAB 0x8619 +0x8FDAAC 0x861B +0x8FDAAD 0x861E +0x8FDAAE 0x8621 +0x8FDAAF 0x8627 +0x8FDAB0 0x8629 +0x8FDAB1 0x8636 +0x8FDAB2 0x8638 +0x8FDAB3 0x863A +0x8FDAB4 0x863C +0x8FDAB5 0x863D +0x8FDAB6 0x8640 +0x8FDAB7 0x8642 +0x8FDAB8 0x8646 +0x8FDAB9 0x8652 +0x8FDABA 0x8653 +0x8FDABB 0x8656 +0x8FDABC 0x8657 +0x8FDABD 0x8658 +0x8FDABE 0x8659 +0x8FDABF 0x865D +0x8FDAC0 0x8660 +0x8FDAC1 0x8661 +0x8FDAC2 0x8662 +0x8FDAC3 0x8663 +0x8FDAC4 0x8664 +0x8FDAC5 0x8669 +0x8FDAC6 0x866C +0x8FDAC7 0x866F +0x8FDAC8 0x8675 +0x8FDAC9 0x8676 +0x8FDACA 0x8677 +0x8FDACB 0x867A +0x8FDACC 0x868D +0x8FDACD 0x8691 +0x8FDACE 0x8696 +0x8FDACF 0x8698 +0x8FDAD0 0x869A +0x8FDAD1 0x869C +0x8FDAD2 0x86A1 +0x8FDAD3 0x86A6 +0x8FDAD4 0x86A7 +0x8FDAD5 0x86A8 +0x8FDAD6 0x86AD +0x8FDAD7 0x86B1 +0x8FDAD8 0x86B3 +0x8FDAD9 0x86B4 +0x8FDADA 0x86B5 +0x8FDADB 0x86B7 +0x8FDADC 0x86B8 +0x8FDADD 0x86B9 +0x8FDADE 0x86BF +0x8FDADF 0x86C0 +0x8FDAE0 0x86C1 +0x8FDAE1 0x86C3 +0x8FDAE2 0x86C5 +0x8FDAE3 0x86D1 +0x8FDAE4 0x86D2 +0x8FDAE5 0x86D5 +0x8FDAE6 0x86D7 +0x8FDAE7 0x86DA +0x8FDAE8 0x86DC +0x8FDAE9 0x86E0 +0x8FDAEA 0x86E3 +0x8FDAEB 0x86E5 +0x8FDAEC 0x86E7 +0x8FDAED 0x8688 +0x8FDAEE 0x86FA +0x8FDAEF 0x86FC +0x8FDAF0 0x86FD +0x8FDAF1 0x8704 +0x8FDAF2 0x8705 +0x8FDAF3 0x8707 +0x8FDAF4 0x870B +0x8FDAF5 0x870E +0x8FDAF6 0x870F +0x8FDAF7 0x8710 +0x8FDAF8 0x8713 +0x8FDAF9 0x8714 +0x8FDAFA 0x8719 +0x8FDAFB 0x871E +0x8FDAFC 0x871F +0x8FDAFD 0x8721 +0x8FDAFE 0x8723 +0x8FDBA1 0x8728 +0x8FDBA2 0x872E +0x8FDBA3 0x872F +0x8FDBA4 0x8731 +0x8FDBA5 0x8732 +0x8FDBA6 0x8739 +0x8FDBA7 0x873A +0x8FDBA8 0x873C +0x8FDBA9 0x873D +0x8FDBAA 0x873E +0x8FDBAB 0x8740 +0x8FDBAC 0x8743 +0x8FDBAD 0x8745 +0x8FDBAE 0x874D +0x8FDBAF 0x8758 +0x8FDBB0 0x875D +0x8FDBB1 0x8761 +0x8FDBB2 0x8764 +0x8FDBB3 0x8765 +0x8FDBB4 0x876F +0x8FDBB5 0x8771 +0x8FDBB6 0x8772 +0x8FDBB7 0x877B +0x8FDBB8 0x8783 +0x8FDBB9 0x8784 +0x8FDBBA 0x8785 +0x8FDBBB 0x8786 +0x8FDBBC 0x8787 +0x8FDBBD 0x8788 +0x8FDBBE 0x8789 +0x8FDBBF 0x878B +0x8FDBC0 0x878C +0x8FDBC1 0x8790 +0x8FDBC2 0x8793 +0x8FDBC3 0x8795 +0x8FDBC4 0x8797 +0x8FDBC5 0x8798 +0x8FDBC6 0x8799 +0x8FDBC7 0x879E +0x8FDBC8 0x87A0 +0x8FDBC9 0x87A3 +0x8FDBCA 0x87A7 +0x8FDBCB 0x87AC +0x8FDBCC 0x87AD +0x8FDBCD 0x87AE +0x8FDBCE 0x87B1 +0x8FDBCF 0x87B5 +0x8FDBD0 0x87BE +0x8FDBD1 0x87BF +0x8FDBD2 0x87C1 +0x8FDBD3 0x87C8 +0x8FDBD4 0x87C9 +0x8FDBD5 0x87CA +0x8FDBD6 0x87CE +0x8FDBD7 0x87D5 +0x8FDBD8 0x87D6 +0x8FDBD9 0x87D9 +0x8FDBDA 0x87DA +0x8FDBDB 0x87DC +0x8FDBDC 0x87DF +0x8FDBDD 0x87E2 +0x8FDBDE 0x87E3 +0x8FDBDF 0x87E4 +0x8FDBE0 0x87EA +0x8FDBE1 0x87EB +0x8FDBE2 0x87ED +0x8FDBE3 0x87F1 +0x8FDBE4 0x87F3 +0x8FDBE5 0x87F8 +0x8FDBE6 0x87FA +0x8FDBE7 0x87FF +0x8FDBE8 0x8801 +0x8FDBE9 0x8803 +0x8FDBEA 0x8806 +0x8FDBEB 0x8809 +0x8FDBEC 0x880A +0x8FDBED 0x880B +0x8FDBEE 0x8810 +0x8FDBEF 0x8819 +0x8FDBF0 0x8812 +0x8FDBF1 0x8813 +0x8FDBF2 0x8814 +0x8FDBF3 0x8818 +0x8FDBF4 0x881A +0x8FDBF5 0x881B +0x8FDBF6 0x881C +0x8FDBF7 0x881E +0x8FDBF8 0x881F +0x8FDBF9 0x8828 +0x8FDBFA 0x882D +0x8FDBFB 0x882E +0x8FDBFC 0x8830 +0x8FDBFD 0x8832 +0x8FDBFE 0x8835 +0x8FDCA1 0x883A +0x8FDCA2 0x883C +0x8FDCA3 0x8841 +0x8FDCA4 0x8843 +0x8FDCA5 0x8845 +0x8FDCA6 0x8848 +0x8FDCA7 0x8849 +0x8FDCA8 0x884A +0x8FDCA9 0x884B +0x8FDCAA 0x884E +0x8FDCAB 0x8851 +0x8FDCAC 0x8855 +0x8FDCAD 0x8856 +0x8FDCAE 0x8858 +0x8FDCAF 0x885A +0x8FDCB0 0x885C +0x8FDCB1 0x885F +0x8FDCB2 0x8860 +0x8FDCB3 0x8864 +0x8FDCB4 0x8869 +0x8FDCB5 0x8871 +0x8FDCB6 0x8879 +0x8FDCB7 0x887B +0x8FDCB8 0x8880 +0x8FDCB9 0x8898 +0x8FDCBA 0x889A +0x8FDCBB 0x889B +0x8FDCBC 0x889C +0x8FDCBD 0x889F +0x8FDCBE 0x88A0 +0x8FDCBF 0x88A8 +0x8FDCC0 0x88AA +0x8FDCC1 0x88BA +0x8FDCC2 0x88BD +0x8FDCC3 0x88BE +0x8FDCC4 0x88C0 +0x8FDCC5 0x88CA +0x8FDCC6 0x88CB +0x8FDCC7 0x88CC +0x8FDCC8 0x88CD +0x8FDCC9 0x88CE +0x8FDCCA 0x88D1 +0x8FDCCB 0x88D2 +0x8FDCCC 0x88D3 +0x8FDCCD 0x88DB +0x8FDCCE 0x88DE +0x8FDCCF 0x88E7 +0x8FDCD0 0x88EF +0x8FDCD1 0x88F0 +0x8FDCD2 0x88F1 +0x8FDCD3 0x88F5 +0x8FDCD4 0x88F7 +0x8FDCD5 0x8901 +0x8FDCD6 0x8906 +0x8FDCD7 0x890D +0x8FDCD8 0x890E +0x8FDCD9 0x890F +0x8FDCDA 0x8915 +0x8FDCDB 0x8916 +0x8FDCDC 0x8918 +0x8FDCDD 0x8919 +0x8FDCDE 0x891A +0x8FDCDF 0x891C +0x8FDCE0 0x8920 +0x8FDCE1 0x8926 +0x8FDCE2 0x8927 +0x8FDCE3 0x8928 +0x8FDCE4 0x8930 +0x8FDCE5 0x8931 +0x8FDCE6 0x8932 +0x8FDCE7 0x8935 +0x8FDCE8 0x8939 +0x8FDCE9 0x893A +0x8FDCEA 0x893E +0x8FDCEB 0x8940 +0x8FDCEC 0x8942 +0x8FDCED 0x8945 +0x8FDCEE 0x8946 +0x8FDCEF 0x8949 +0x8FDCF0 0x894F +0x8FDCF1 0x8952 +0x8FDCF2 0x8957 +0x8FDCF3 0x895A +0x8FDCF4 0x895B +0x8FDCF5 0x895C +0x8FDCF6 0x8961 +0x8FDCF7 0x8962 +0x8FDCF8 0x8963 +0x8FDCF9 0x896B +0x8FDCFA 0x896E +0x8FDCFB 0x8970 +0x8FDCFC 0x8973 +0x8FDCFD 0x8975 +0x8FDCFE 0x897A +0x8FDDA1 0x897B +0x8FDDA2 0x897C +0x8FDDA3 0x897D +0x8FDDA4 0x8989 +0x8FDDA5 0x898D +0x8FDDA6 0x8990 +0x8FDDA7 0x8994 +0x8FDDA8 0x8995 +0x8FDDA9 0x899B +0x8FDDAA 0x899C +0x8FDDAB 0x899F +0x8FDDAC 0x89A0 +0x8FDDAD 0x89A5 +0x8FDDAE 0x89B0 +0x8FDDAF 0x89B4 +0x8FDDB0 0x89B5 +0x8FDDB1 0x89B6 +0x8FDDB2 0x89B7 +0x8FDDB3 0x89BC +0x8FDDB4 0x89D4 +0x8FDDB5 0x89D5 +0x8FDDB6 0x89D6 +0x8FDDB7 0x89D7 +0x8FDDB8 0x89D8 +0x8FDDB9 0x89E5 +0x8FDDBA 0x89E9 +0x8FDDBB 0x89EB +0x8FDDBC 0x89ED +0x8FDDBD 0x89F1 +0x8FDDBE 0x89F3 +0x8FDDBF 0x89F6 +0x8FDDC0 0x89F9 +0x8FDDC1 0x89FD +0x8FDDC2 0x89FF +0x8FDDC3 0x8A04 +0x8FDDC4 0x8A05 +0x8FDDC5 0x8A07 +0x8FDDC6 0x8A0F +0x8FDDC7 0x8A11 +0x8FDDC8 0x8A12 +0x8FDDC9 0x8A14 +0x8FDDCA 0x8A15 +0x8FDDCB 0x8A1E +0x8FDDCC 0x8A20 +0x8FDDCD 0x8A22 +0x8FDDCE 0x8A24 +0x8FDDCF 0x8A26 +0x8FDDD0 0x8A2B +0x8FDDD1 0x8A2C +0x8FDDD2 0x8A2F +0x8FDDD3 0x8A35 +0x8FDDD4 0x8A37 +0x8FDDD5 0x8A3D +0x8FDDD6 0x8A3E +0x8FDDD7 0x8A40 +0x8FDDD8 0x8A43 +0x8FDDD9 0x8A45 +0x8FDDDA 0x8A47 +0x8FDDDB 0x8A49 +0x8FDDDC 0x8A4D +0x8FDDDD 0x8A4E +0x8FDDDE 0x8A53 +0x8FDDDF 0x8A56 +0x8FDDE0 0x8A57 +0x8FDDE1 0x8A58 +0x8FDDE2 0x8A5C +0x8FDDE3 0x8A5D +0x8FDDE4 0x8A61 +0x8FDDE5 0x8A65 +0x8FDDE6 0x8A67 +0x8FDDE7 0x8A75 +0x8FDDE8 0x8A76 +0x8FDDE9 0x8A77 +0x8FDDEA 0x8A79 +0x8FDDEB 0x8A7A +0x8FDDEC 0x8A7B +0x8FDDED 0x8A7E +0x8FDDEE 0x8A7F +0x8FDDEF 0x8A80 +0x8FDDF0 0x8A83 +0x8FDDF1 0x8A86 +0x8FDDF2 0x8A8B +0x8FDDF3 0x8A8F +0x8FDDF4 0x8A90 +0x8FDDF5 0x8A92 +0x8FDDF6 0x8A96 +0x8FDDF7 0x8A97 +0x8FDDF8 0x8A99 +0x8FDDF9 0x8A9F +0x8FDDFA 0x8AA7 +0x8FDDFB 0x8AA9 +0x8FDDFC 0x8AAE +0x8FDDFD 0x8AAF +0x8FDDFE 0x8AB3 +0x8FDEA1 0x8AB6 +0x8FDEA2 0x8AB7 +0x8FDEA3 0x8ABB +0x8FDEA4 0x8ABE +0x8FDEA5 0x8AC3 +0x8FDEA6 0x8AC6 +0x8FDEA7 0x8AC8 +0x8FDEA8 0x8AC9 +0x8FDEA9 0x8ACA +0x8FDEAA 0x8AD1 +0x8FDEAB 0x8AD3 +0x8FDEAC 0x8AD4 +0x8FDEAD 0x8AD5 +0x8FDEAE 0x8AD7 +0x8FDEAF 0x8ADD +0x8FDEB0 0x8ADF +0x8FDEB1 0x8AEC +0x8FDEB2 0x8AF0 +0x8FDEB3 0x8AF4 +0x8FDEB4 0x8AF5 +0x8FDEB5 0x8AF6 +0x8FDEB6 0x8AFC +0x8FDEB7 0x8AFF +0x8FDEB8 0x8B05 +0x8FDEB9 0x8B06 +0x8FDEBA 0x8B0B +0x8FDEBB 0x8B11 +0x8FDEBC 0x8B1C +0x8FDEBD 0x8B1E +0x8FDEBE 0x8B1F +0x8FDEBF 0x8B0A +0x8FDEC0 0x8B2D +0x8FDEC1 0x8B30 +0x8FDEC2 0x8B37 +0x8FDEC3 0x8B3C +0x8FDEC4 0x8B42 +0x8FDEC5 0x8B43 +0x8FDEC6 0x8B44 +0x8FDEC7 0x8B45 +0x8FDEC8 0x8B46 +0x8FDEC9 0x8B48 +0x8FDECA 0x8B52 +0x8FDECB 0x8B53 +0x8FDECC 0x8B54 +0x8FDECD 0x8B59 +0x8FDECE 0x8B4D +0x8FDECF 0x8B5E +0x8FDED0 0x8B63 +0x8FDED1 0x8B6D +0x8FDED2 0x8B76 +0x8FDED3 0x8B78 +0x8FDED4 0x8B79 +0x8FDED5 0x8B7C +0x8FDED6 0x8B7E +0x8FDED7 0x8B81 +0x8FDED8 0x8B84 +0x8FDED9 0x8B85 +0x8FDEDA 0x8B8B +0x8FDEDB 0x8B8D +0x8FDEDC 0x8B8F +0x8FDEDD 0x8B94 +0x8FDEDE 0x8B95 +0x8FDEDF 0x8B9C +0x8FDEE0 0x8B9E +0x8FDEE1 0x8B9F +0x8FDEE2 0x8C38 +0x8FDEE3 0x8C39 +0x8FDEE4 0x8C3D +0x8FDEE5 0x8C3E +0x8FDEE6 0x8C45 +0x8FDEE7 0x8C47 +0x8FDEE8 0x8C49 +0x8FDEE9 0x8C4B +0x8FDEEA 0x8C4F +0x8FDEEB 0x8C51 +0x8FDEEC 0x8C53 +0x8FDEED 0x8C54 +0x8FDEEE 0x8C57 +0x8FDEEF 0x8C58 +0x8FDEF0 0x8C5B +0x8FDEF1 0x8C5D +0x8FDEF2 0x8C59 +0x8FDEF3 0x8C63 +0x8FDEF4 0x8C64 +0x8FDEF5 0x8C66 +0x8FDEF6 0x8C68 +0x8FDEF7 0x8C69 +0x8FDEF8 0x8C6D +0x8FDEF9 0x8C73 +0x8FDEFA 0x8C75 +0x8FDEFB 0x8C76 +0x8FDEFC 0x8C7B +0x8FDEFD 0x8C7E +0x8FDEFE 0x8C86 +0x8FDFA1 0x8C87 +0x8FDFA2 0x8C8B +0x8FDFA3 0x8C90 +0x8FDFA4 0x8C92 +0x8FDFA5 0x8C93 +0x8FDFA6 0x8C99 +0x8FDFA7 0x8C9B +0x8FDFA8 0x8C9C +0x8FDFA9 0x8CA4 +0x8FDFAA 0x8CB9 +0x8FDFAB 0x8CBA +0x8FDFAC 0x8CC5 +0x8FDFAD 0x8CC6 +0x8FDFAE 0x8CC9 +0x8FDFAF 0x8CCB +0x8FDFB0 0x8CCF +0x8FDFB1 0x8CD6 +0x8FDFB2 0x8CD5 +0x8FDFB3 0x8CD9 +0x8FDFB4 0x8CDD +0x8FDFB5 0x8CE1 +0x8FDFB6 0x8CE8 +0x8FDFB7 0x8CEC +0x8FDFB8 0x8CEF +0x8FDFB9 0x8CF0 +0x8FDFBA 0x8CF2 +0x8FDFBB 0x8CF5 +0x8FDFBC 0x8CF7 +0x8FDFBD 0x8CF8 +0x8FDFBE 0x8CFE +0x8FDFBF 0x8CFF +0x8FDFC0 0x8D01 +0x8FDFC1 0x8D03 +0x8FDFC2 0x8D09 +0x8FDFC3 0x8D12 +0x8FDFC4 0x8D17 +0x8FDFC5 0x8D1B +0x8FDFC6 0x8D65 +0x8FDFC7 0x8D69 +0x8FDFC8 0x8D6C +0x8FDFC9 0x8D6E +0x8FDFCA 0x8D7F +0x8FDFCB 0x8D82 +0x8FDFCC 0x8D84 +0x8FDFCD 0x8D88 +0x8FDFCE 0x8D8D +0x8FDFCF 0x8D90 +0x8FDFD0 0x8D91 +0x8FDFD1 0x8D95 +0x8FDFD2 0x8D9E +0x8FDFD3 0x8D9F +0x8FDFD4 0x8DA0 +0x8FDFD5 0x8DA6 +0x8FDFD6 0x8DAB +0x8FDFD7 0x8DAC +0x8FDFD8 0x8DAF +0x8FDFD9 0x8DB2 +0x8FDFDA 0x8DB5 +0x8FDFDB 0x8DB7 +0x8FDFDC 0x8DB9 +0x8FDFDD 0x8DBB +0x8FDFDE 0x8DC0 +0x8FDFDF 0x8DC5 +0x8FDFE0 0x8DC6 +0x8FDFE1 0x8DC7 +0x8FDFE2 0x8DC8 +0x8FDFE3 0x8DCA +0x8FDFE4 0x8DCE +0x8FDFE5 0x8DD1 +0x8FDFE6 0x8DD4 +0x8FDFE7 0x8DD5 +0x8FDFE8 0x8DD7 +0x8FDFE9 0x8DD9 +0x8FDFEA 0x8DE4 +0x8FDFEB 0x8DE5 +0x8FDFEC 0x8DE7 +0x8FDFED 0x8DEC +0x8FDFEE 0x8DF0 +0x8FDFEF 0x8DBC +0x8FDFF0 0x8DF1 +0x8FDFF1 0x8DF2 +0x8FDFF2 0x8DF4 +0x8FDFF3 0x8DFD +0x8FDFF4 0x8E01 +0x8FDFF5 0x8E04 +0x8FDFF6 0x8E05 +0x8FDFF7 0x8E06 +0x8FDFF8 0x8E0B +0x8FDFF9 0x8E11 +0x8FDFFA 0x8E14 +0x8FDFFB 0x8E16 +0x8FDFFC 0x8E20 +0x8FDFFD 0x8E21 +0x8FDFFE 0x8E22 +0x8FE0A1 0x8E23 +0x8FE0A2 0x8E26 +0x8FE0A3 0x8E27 +0x8FE0A4 0x8E31 +0x8FE0A5 0x8E33 +0x8FE0A6 0x8E36 +0x8FE0A7 0x8E37 +0x8FE0A8 0x8E38 +0x8FE0A9 0x8E39 +0x8FE0AA 0x8E3D +0x8FE0AB 0x8E40 +0x8FE0AC 0x8E41 +0x8FE0AD 0x8E4B +0x8FE0AE 0x8E4D +0x8FE0AF 0x8E4E +0x8FE0B0 0x8E4F +0x8FE0B1 0x8E54 +0x8FE0B2 0x8E5B +0x8FE0B3 0x8E5C +0x8FE0B4 0x8E5D +0x8FE0B5 0x8E5E +0x8FE0B6 0x8E61 +0x8FE0B7 0x8E62 +0x8FE0B8 0x8E69 +0x8FE0B9 0x8E6C +0x8FE0BA 0x8E6D +0x8FE0BB 0x8E6F +0x8FE0BC 0x8E70 +0x8FE0BD 0x8E71 +0x8FE0BE 0x8E79 +0x8FE0BF 0x8E7A +0x8FE0C0 0x8E7B +0x8FE0C1 0x8E82 +0x8FE0C2 0x8E83 +0x8FE0C3 0x8E89 +0x8FE0C4 0x8E90 +0x8FE0C5 0x8E92 +0x8FE0C6 0x8E95 +0x8FE0C7 0x8E9A +0x8FE0C8 0x8E9B +0x8FE0C9 0x8E9D +0x8FE0CA 0x8E9E +0x8FE0CB 0x8EA2 +0x8FE0CC 0x8EA7 +0x8FE0CD 0x8EA9 +0x8FE0CE 0x8EAD +0x8FE0CF 0x8EAE +0x8FE0D0 0x8EB3 +0x8FE0D1 0x8EB5 +0x8FE0D2 0x8EBA +0x8FE0D3 0x8EBB +0x8FE0D4 0x8EC0 +0x8FE0D5 0x8EC1 +0x8FE0D6 0x8EC3 +0x8FE0D7 0x8EC4 +0x8FE0D8 0x8EC7 +0x8FE0D9 0x8ECF +0x8FE0DA 0x8ED1 +0x8FE0DB 0x8ED4 +0x8FE0DC 0x8EDC +0x8FE0DD 0x8EE8 +0x8FE0DE 0x8EEE +0x8FE0DF 0x8EF0 +0x8FE0E0 0x8EF1 +0x8FE0E1 0x8EF7 +0x8FE0E2 0x8EF9 +0x8FE0E3 0x8EFA +0x8FE0E4 0x8EED +0x8FE0E5 0x8F00 +0x8FE0E6 0x8F02 +0x8FE0E7 0x8F07 +0x8FE0E8 0x8F08 +0x8FE0E9 0x8F0F +0x8FE0EA 0x8F10 +0x8FE0EB 0x8F16 +0x8FE0EC 0x8F17 +0x8FE0ED 0x8F18 +0x8FE0EE 0x8F1E +0x8FE0EF 0x8F20 +0x8FE0F0 0x8F21 +0x8FE0F1 0x8F23 +0x8FE0F2 0x8F25 +0x8FE0F3 0x8F27 +0x8FE0F4 0x8F28 +0x8FE0F5 0x8F2C +0x8FE0F6 0x8F2D +0x8FE0F7 0x8F2E +0x8FE0F8 0x8F34 +0x8FE0F9 0x8F35 +0x8FE0FA 0x8F36 +0x8FE0FB 0x8F37 +0x8FE0FC 0x8F3A +0x8FE0FD 0x8F40 +0x8FE0FE 0x8F41 +0x8FE1A1 0x8F43 +0x8FE1A2 0x8F47 +0x8FE1A3 0x8F4F +0x8FE1A4 0x8F51 +0x8FE1A5 0x8F52 +0x8FE1A6 0x8F53 +0x8FE1A7 0x8F54 +0x8FE1A8 0x8F55 +0x8FE1A9 0x8F58 +0x8FE1AA 0x8F5D +0x8FE1AB 0x8F5E +0x8FE1AC 0x8F65 +0x8FE1AD 0x8F9D +0x8FE1AE 0x8FA0 +0x8FE1AF 0x8FA1 +0x8FE1B0 0x8FA4 +0x8FE1B1 0x8FA5 +0x8FE1B2 0x8FA6 +0x8FE1B3 0x8FB5 +0x8FE1B4 0x8FB6 +0x8FE1B5 0x8FB8 +0x8FE1B6 0x8FBE +0x8FE1B7 0x8FC0 +0x8FE1B8 0x8FC1 +0x8FE1B9 0x8FC6 +0x8FE1BA 0x8FCA +0x8FE1BB 0x8FCB +0x8FE1BC 0x8FCD +0x8FE1BD 0x8FD0 +0x8FE1BE 0x8FD2 +0x8FE1BF 0x8FD3 +0x8FE1C0 0x8FD5 +0x8FE1C1 0x8FE0 +0x8FE1C2 0x8FE3 +0x8FE1C3 0x8FE4 +0x8FE1C4 0x8FE8 +0x8FE1C5 0x8FEE +0x8FE1C6 0x8FF1 +0x8FE1C7 0x8FF5 +0x8FE1C8 0x8FF6 +0x8FE1C9 0x8FFB +0x8FE1CA 0x8FFE +0x8FE1CB 0x9002 +0x8FE1CC 0x9004 +0x8FE1CD 0x9008 +0x8FE1CE 0x900C +0x8FE1CF 0x9018 +0x8FE1D0 0x901B +0x8FE1D1 0x9028 +0x8FE1D2 0x9029 +0x8FE1D3 0x902F +0x8FE1D4 0x902A +0x8FE1D5 0x902C +0x8FE1D6 0x902D +0x8FE1D7 0x9033 +0x8FE1D8 0x9034 +0x8FE1D9 0x9037 +0x8FE1DA 0x903F +0x8FE1DB 0x9043 +0x8FE1DC 0x9044 +0x8FE1DD 0x904C +0x8FE1DE 0x905B +0x8FE1DF 0x905D +0x8FE1E0 0x9062 +0x8FE1E1 0x9066 +0x8FE1E2 0x9067 +0x8FE1E3 0x906C +0x8FE1E4 0x9070 +0x8FE1E5 0x9074 +0x8FE1E6 0x9079 +0x8FE1E7 0x9085 +0x8FE1E8 0x9088 +0x8FE1E9 0x908B +0x8FE1EA 0x908C +0x8FE1EB 0x908E +0x8FE1EC 0x9090 +0x8FE1ED 0x9095 +0x8FE1EE 0x9097 +0x8FE1EF 0x9098 +0x8FE1F0 0x9099 +0x8FE1F1 0x909B +0x8FE1F2 0x90A0 +0x8FE1F3 0x90A1 +0x8FE1F4 0x90A2 +0x8FE1F5 0x90A5 +0x8FE1F6 0x90B0 +0x8FE1F7 0x90B2 +0x8FE1F8 0x90B3 +0x8FE1F9 0x90B4 +0x8FE1FA 0x90B6 +0x8FE1FB 0x90BD +0x8FE1FC 0x90CC +0x8FE1FD 0x90BE +0x8FE1FE 0x90C3 +0x8FE2A1 0x90C4 +0x8FE2A2 0x90C5 +0x8FE2A3 0x90C7 +0x8FE2A4 0x90C8 +0x8FE2A5 0x90D5 +0x8FE2A6 0x90D7 +0x8FE2A7 0x90D8 +0x8FE2A8 0x90D9 +0x8FE2A9 0x90DC +0x8FE2AA 0x90DD +0x8FE2AB 0x90DF +0x8FE2AC 0x90E5 +0x8FE2AD 0x90D2 +0x8FE2AE 0x90F6 +0x8FE2AF 0x90EB +0x8FE2B0 0x90EF +0x8FE2B1 0x90F0 +0x8FE2B2 0x90F4 +0x8FE2B3 0x90FE +0x8FE2B4 0x90FF +0x8FE2B5 0x9100 +0x8FE2B6 0x9104 +0x8FE2B7 0x9105 +0x8FE2B8 0x9106 +0x8FE2B9 0x9108 +0x8FE2BA 0x910D +0x8FE2BB 0x9110 +0x8FE2BC 0x9114 +0x8FE2BD 0x9116 +0x8FE2BE 0x9117 +0x8FE2BF 0x9118 +0x8FE2C0 0x911A +0x8FE2C1 0x911C +0x8FE2C2 0x911E +0x8FE2C3 0x9120 +0x8FE2C4 0x9125 +0x8FE2C5 0x9122 +0x8FE2C6 0x9123 +0x8FE2C7 0x9127 +0x8FE2C8 0x9129 +0x8FE2C9 0x912E +0x8FE2CA 0x912F +0x8FE2CB 0x9131 +0x8FE2CC 0x9134 +0x8FE2CD 0x9136 +0x8FE2CE 0x9137 +0x8FE2CF 0x9139 +0x8FE2D0 0x913A +0x8FE2D1 0x913C +0x8FE2D2 0x913D +0x8FE2D3 0x9143 +0x8FE2D4 0x9147 +0x8FE2D5 0x9148 +0x8FE2D6 0x914F +0x8FE2D7 0x9153 +0x8FE2D8 0x9157 +0x8FE2D9 0x9159 +0x8FE2DA 0x915A +0x8FE2DB 0x915B +0x8FE2DC 0x9161 +0x8FE2DD 0x9164 +0x8FE2DE 0x9167 +0x8FE2DF 0x916D +0x8FE2E0 0x9174 +0x8FE2E1 0x9179 +0x8FE2E2 0x917A +0x8FE2E3 0x917B +0x8FE2E4 0x9181 +0x8FE2E5 0x9183 +0x8FE2E6 0x9185 +0x8FE2E7 0x9186 +0x8FE2E8 0x918A +0x8FE2E9 0x918E +0x8FE2EA 0x9191 +0x8FE2EB 0x9193 +0x8FE2EC 0x9194 +0x8FE2ED 0x9195 +0x8FE2EE 0x9198 +0x8FE2EF 0x919E +0x8FE2F0 0x91A1 +0x8FE2F1 0x91A6 +0x8FE2F2 0x91A8 +0x8FE2F3 0x91AC +0x8FE2F4 0x91AD +0x8FE2F5 0x91AE +0x8FE2F6 0x91B0 +0x8FE2F7 0x91B1 +0x8FE2F8 0x91B2 +0x8FE2F9 0x91B3 +0x8FE2FA 0x91B6 +0x8FE2FB 0x91BB +0x8FE2FC 0x91BC +0x8FE2FD 0x91BD +0x8FE2FE 0x91BF +0x8FE3A1 0x91C2 +0x8FE3A2 0x91C3 +0x8FE3A3 0x91C5 +0x8FE3A4 0x91D3 +0x8FE3A5 0x91D4 +0x8FE3A6 0x91D7 +0x8FE3A7 0x91D9 +0x8FE3A8 0x91DA +0x8FE3A9 0x91DE +0x8FE3AA 0x91E4 +0x8FE3AB 0x91E5 +0x8FE3AC 0x91E9 +0x8FE3AD 0x91EA +0x8FE3AE 0x91EC +0x8FE3AF 0x91ED +0x8FE3B0 0x91EE +0x8FE3B1 0x91EF +0x8FE3B2 0x91F0 +0x8FE3B3 0x91F1 +0x8FE3B4 0x91F7 +0x8FE3B5 0x91F9 +0x8FE3B6 0x91FB +0x8FE3B7 0x91FD +0x8FE3B8 0x9200 +0x8FE3B9 0x9201 +0x8FE3BA 0x9204 +0x8FE3BB 0x9205 +0x8FE3BC 0x9206 +0x8FE3BD 0x9207 +0x8FE3BE 0x9209 +0x8FE3BF 0x920A +0x8FE3C0 0x920C +0x8FE3C1 0x9210 +0x8FE3C2 0x9212 +0x8FE3C3 0x9213 +0x8FE3C4 0x9216 +0x8FE3C5 0x9218 +0x8FE3C6 0x921C +0x8FE3C7 0x921D +0x8FE3C8 0x9223 +0x8FE3C9 0x9224 +0x8FE3CA 0x9225 +0x8FE3CB 0x9226 +0x8FE3CC 0x9228 +0x8FE3CD 0x922E +0x8FE3CE 0x922F +0x8FE3CF 0x9230 +0x8FE3D0 0x9233 +0x8FE3D1 0x9235 +0x8FE3D2 0x9236 +0x8FE3D3 0x9238 +0x8FE3D4 0x9239 +0x8FE3D5 0x923A +0x8FE3D6 0x923C +0x8FE3D7 0x923E +0x8FE3D8 0x9240 +0x8FE3D9 0x9242 +0x8FE3DA 0x9243 +0x8FE3DB 0x9246 +0x8FE3DC 0x9247 +0x8FE3DD 0x924A +0x8FE3DE 0x924D +0x8FE3DF 0x924E +0x8FE3E0 0x924F +0x8FE3E1 0x9251 +0x8FE3E2 0x9258 +0x8FE3E3 0x9259 +0x8FE3E4 0x925C +0x8FE3E5 0x925D +0x8FE3E6 0x9260 +0x8FE3E7 0x9261 +0x8FE3E8 0x9265 +0x8FE3E9 0x9267 +0x8FE3EA 0x9268 +0x8FE3EB 0x9269 +0x8FE3EC 0x926E +0x8FE3ED 0x926F +0x8FE3EE 0x9270 +0x8FE3EF 0x9275 +0x8FE3F0 0x9276 +0x8FE3F1 0x9277 +0x8FE3F2 0x9278 +0x8FE3F3 0x9279 +0x8FE3F4 0x927B +0x8FE3F5 0x927C +0x8FE3F6 0x927D +0x8FE3F7 0x927F +0x8FE3F8 0x9288 +0x8FE3F9 0x9289 +0x8FE3FA 0x928A +0x8FE3FB 0x928D +0x8FE3FC 0x928E +0x8FE3FD 0x9292 +0x8FE3FE 0x9297 +0x8FE4A1 0x9299 +0x8FE4A2 0x929F +0x8FE4A3 0x92A0 +0x8FE4A4 0x92A4 +0x8FE4A5 0x92A5 +0x8FE4A6 0x92A7 +0x8FE4A7 0x92A8 +0x8FE4A8 0x92AB +0x8FE4A9 0x92AF +0x8FE4AA 0x92B2 +0x8FE4AB 0x92B6 +0x8FE4AC 0x92B8 +0x8FE4AD 0x92BA +0x8FE4AE 0x92BB +0x8FE4AF 0x92BC +0x8FE4B0 0x92BD +0x8FE4B1 0x92BF +0x8FE4B2 0x92C0 +0x8FE4B3 0x92C1 +0x8FE4B4 0x92C2 +0x8FE4B5 0x92C3 +0x8FE4B6 0x92C5 +0x8FE4B7 0x92C6 +0x8FE4B8 0x92C7 +0x8FE4B9 0x92C8 +0x8FE4BA 0x92CB +0x8FE4BB 0x92CC +0x8FE4BC 0x92CD +0x8FE4BD 0x92CE +0x8FE4BE 0x92D0 +0x8FE4BF 0x92D3 +0x8FE4C0 0x92D5 +0x8FE4C1 0x92D7 +0x8FE4C2 0x92D8 +0x8FE4C3 0x92D9 +0x8FE4C4 0x92DC +0x8FE4C5 0x92DD +0x8FE4C6 0x92DF +0x8FE4C7 0x92E0 +0x8FE4C8 0x92E1 +0x8FE4C9 0x92E3 +0x8FE4CA 0x92E5 +0x8FE4CB 0x92E7 +0x8FE4CC 0x92E8 +0x8FE4CD 0x92EC +0x8FE4CE 0x92EE +0x8FE4CF 0x92F0 +0x8FE4D0 0x92F9 +0x8FE4D1 0x92FB +0x8FE4D2 0x92FF +0x8FE4D3 0x9300 +0x8FE4D4 0x9302 +0x8FE4D5 0x9308 +0x8FE4D6 0x930D +0x8FE4D7 0x9311 +0x8FE4D8 0x9314 +0x8FE4D9 0x9315 +0x8FE4DA 0x931C +0x8FE4DB 0x931D +0x8FE4DC 0x931E +0x8FE4DD 0x931F +0x8FE4DE 0x9321 +0x8FE4DF 0x9324 +0x8FE4E0 0x9325 +0x8FE4E1 0x9327 +0x8FE4E2 0x9329 +0x8FE4E3 0x932A +0x8FE4E4 0x9333 +0x8FE4E5 0x9334 +0x8FE4E6 0x9336 +0x8FE4E7 0x9337 +0x8FE4E8 0x9347 +0x8FE4E9 0x9348 +0x8FE4EA 0x9349 +0x8FE4EB 0x9350 +0x8FE4EC 0x9351 +0x8FE4ED 0x9352 +0x8FE4EE 0x9355 +0x8FE4EF 0x9357 +0x8FE4F0 0x9358 +0x8FE4F1 0x935A +0x8FE4F2 0x935E +0x8FE4F3 0x9364 +0x8FE4F4 0x9365 +0x8FE4F5 0x9367 +0x8FE4F6 0x9369 +0x8FE4F7 0x936A +0x8FE4F8 0x936D +0x8FE4F9 0x936F +0x8FE4FA 0x9370 +0x8FE4FB 0x9371 +0x8FE4FC 0x9373 +0x8FE4FD 0x9374 +0x8FE4FE 0x9376 +0x8FE5A1 0x937A +0x8FE5A2 0x937D +0x8FE5A3 0x937F +0x8FE5A4 0x9380 +0x8FE5A5 0x9381 +0x8FE5A6 0x9382 +0x8FE5A7 0x9388 +0x8FE5A8 0x938A +0x8FE5A9 0x938B +0x8FE5AA 0x938D +0x8FE5AB 0x938F +0x8FE5AC 0x9392 +0x8FE5AD 0x9395 +0x8FE5AE 0x9398 +0x8FE5AF 0x939B +0x8FE5B0 0x939E +0x8FE5B1 0x93A1 +0x8FE5B2 0x93A3 +0x8FE5B3 0x93A4 +0x8FE5B4 0x93A6 +0x8FE5B5 0x93A8 +0x8FE5B6 0x93AB +0x8FE5B7 0x93B4 +0x8FE5B8 0x93B5 +0x8FE5B9 0x93B6 +0x8FE5BA 0x93BA +0x8FE5BB 0x93A9 +0x8FE5BC 0x93C1 +0x8FE5BD 0x93C4 +0x8FE5BE 0x93C5 +0x8FE5BF 0x93C6 +0x8FE5C0 0x93C7 +0x8FE5C1 0x93C9 +0x8FE5C2 0x93CA +0x8FE5C3 0x93CB +0x8FE5C4 0x93CC +0x8FE5C5 0x93CD +0x8FE5C6 0x93D3 +0x8FE5C7 0x93D9 +0x8FE5C8 0x93DC +0x8FE5C9 0x93DE +0x8FE5CA 0x93DF +0x8FE5CB 0x93E2 +0x8FE5CC 0x93E6 +0x8FE5CD 0x93E7 +0x8FE5CE 0x93F9 +0x8FE5CF 0x93F7 +0x8FE5D0 0x93F8 +0x8FE5D1 0x93FA +0x8FE5D2 0x93FB +0x8FE5D3 0x93FD +0x8FE5D4 0x9401 +0x8FE5D5 0x9402 +0x8FE5D6 0x9404 +0x8FE5D7 0x9408 +0x8FE5D8 0x9409 +0x8FE5D9 0x940D +0x8FE5DA 0x940E +0x8FE5DB 0x940F +0x8FE5DC 0x9415 +0x8FE5DD 0x9416 +0x8FE5DE 0x9417 +0x8FE5DF 0x941F +0x8FE5E0 0x942E +0x8FE5E1 0x942F +0x8FE5E2 0x9431 +0x8FE5E3 0x9432 +0x8FE5E4 0x9433 +0x8FE5E5 0x9434 +0x8FE5E6 0x943B +0x8FE5E7 0x943F +0x8FE5E8 0x943D +0x8FE5E9 0x9443 +0x8FE5EA 0x9445 +0x8FE5EB 0x9448 +0x8FE5EC 0x944A +0x8FE5ED 0x944C +0x8FE5EE 0x9455 +0x8FE5EF 0x9459 +0x8FE5F0 0x945C +0x8FE5F1 0x945F +0x8FE5F2 0x9461 +0x8FE5F3 0x9463 +0x8FE5F4 0x9468 +0x8FE5F5 0x946B +0x8FE5F6 0x946D +0x8FE5F7 0x946E +0x8FE5F8 0x946F +0x8FE5F9 0x9471 +0x8FE5FA 0x9472 +0x8FE5FB 0x9484 +0x8FE5FC 0x9483 +0x8FE5FD 0x9578 +0x8FE5FE 0x9579 +0x8FE6A1 0x957E +0x8FE6A2 0x9584 +0x8FE6A3 0x9588 +0x8FE6A4 0x958C +0x8FE6A5 0x958D +0x8FE6A6 0x958E +0x8FE6A7 0x959D +0x8FE6A8 0x959E +0x8FE6A9 0x959F +0x8FE6AA 0x95A1 +0x8FE6AB 0x95A6 +0x8FE6AC 0x95A9 +0x8FE6AD 0x95AB +0x8FE6AE 0x95AC +0x8FE6AF 0x95B4 +0x8FE6B0 0x95B6 +0x8FE6B1 0x95BA +0x8FE6B2 0x95BD +0x8FE6B3 0x95BF +0x8FE6B4 0x95C6 +0x8FE6B5 0x95C8 +0x8FE6B6 0x95C9 +0x8FE6B7 0x95CB +0x8FE6B8 0x95D0 +0x8FE6B9 0x95D1 +0x8FE6BA 0x95D2 +0x8FE6BB 0x95D3 +0x8FE6BC 0x95D9 +0x8FE6BD 0x95DA +0x8FE6BE 0x95DD +0x8FE6BF 0x95DE +0x8FE6C0 0x95DF +0x8FE6C1 0x95E0 +0x8FE6C2 0x95E4 +0x8FE6C3 0x95E6 +0x8FE6C4 0x961D +0x8FE6C5 0x961E +0x8FE6C6 0x9622 +0x8FE6C7 0x9624 +0x8FE6C8 0x9625 +0x8FE6C9 0x9626 +0x8FE6CA 0x962C +0x8FE6CB 0x9631 +0x8FE6CC 0x9633 +0x8FE6CD 0x9637 +0x8FE6CE 0x9638 +0x8FE6CF 0x9639 +0x8FE6D0 0x963A +0x8FE6D1 0x963C +0x8FE6D2 0x963D +0x8FE6D3 0x9641 +0x8FE6D4 0x9652 +0x8FE6D5 0x9654 +0x8FE6D6 0x9656 +0x8FE6D7 0x9657 +0x8FE6D8 0x9658 +0x8FE6D9 0x9661 +0x8FE6DA 0x966E +0x8FE6DB 0x9674 +0x8FE6DC 0x967B +0x8FE6DD 0x967C +0x8FE6DE 0x967E +0x8FE6DF 0x967F +0x8FE6E0 0x9681 +0x8FE6E1 0x9682 +0x8FE6E2 0x9683 +0x8FE6E3 0x9684 +0x8FE6E4 0x9689 +0x8FE6E5 0x9691 +0x8FE6E6 0x9696 +0x8FE6E7 0x969A +0x8FE6E8 0x969D +0x8FE6E9 0x969F +0x8FE6EA 0x96A4 +0x8FE6EB 0x96A5 +0x8FE6EC 0x96A6 +0x8FE6ED 0x96A9 +0x8FE6EE 0x96AE +0x8FE6EF 0x96AF +0x8FE6F0 0x96B3 +0x8FE6F1 0x96BA +0x8FE6F2 0x96CA +0x8FE6F3 0x96D2 +0x8FE6F4 0x5DB2 +0x8FE6F5 0x96D8 +0x8FE6F6 0x96DA +0x8FE6F7 0x96DD +0x8FE6F8 0x96DE +0x8FE6F9 0x96DF +0x8FE6FA 0x96E9 +0x8FE6FB 0x96EF +0x8FE6FC 0x96F1 +0x8FE6FD 0x96FA +0x8FE6FE 0x9702 +0x8FE7A1 0x9703 +0x8FE7A2 0x9705 +0x8FE7A3 0x9709 +0x8FE7A4 0x971A +0x8FE7A5 0x971B +0x8FE7A6 0x971D +0x8FE7A7 0x9721 +0x8FE7A8 0x9722 +0x8FE7A9 0x9723 +0x8FE7AA 0x9728 +0x8FE7AB 0x9731 +0x8FE7AC 0x9733 +0x8FE7AD 0x9741 +0x8FE7AE 0x9743 +0x8FE7AF 0x974A +0x8FE7B0 0x974E +0x8FE7B1 0x974F +0x8FE7B2 0x9755 +0x8FE7B3 0x9757 +0x8FE7B4 0x9758 +0x8FE7B5 0x975A +0x8FE7B6 0x975B +0x8FE7B7 0x9763 +0x8FE7B8 0x9767 +0x8FE7B9 0x976A +0x8FE7BA 0x976E +0x8FE7BB 0x9773 +0x8FE7BC 0x9776 +0x8FE7BD 0x9777 +0x8FE7BE 0x9778 +0x8FE7BF 0x977B +0x8FE7C0 0x977D +0x8FE7C1 0x977F +0x8FE7C2 0x9780 +0x8FE7C3 0x9789 +0x8FE7C4 0x9795 +0x8FE7C5 0x9796 +0x8FE7C6 0x9797 +0x8FE7C7 0x9799 +0x8FE7C8 0x979A +0x8FE7C9 0x979E +0x8FE7CA 0x979F +0x8FE7CB 0x97A2 +0x8FE7CC 0x97AC +0x8FE7CD 0x97AE +0x8FE7CE 0x97B1 +0x8FE7CF 0x97B2 +0x8FE7D0 0x97B5 +0x8FE7D1 0x97B6 +0x8FE7D2 0x97B8 +0x8FE7D3 0x97B9 +0x8FE7D4 0x97BA +0x8FE7D5 0x97BC +0x8FE7D6 0x97BE +0x8FE7D7 0x97BF +0x8FE7D8 0x97C1 +0x8FE7D9 0x97C4 +0x8FE7DA 0x97C5 +0x8FE7DB 0x97C7 +0x8FE7DC 0x97C9 +0x8FE7DD 0x97CA +0x8FE7DE 0x97CC +0x8FE7DF 0x97CD +0x8FE7E0 0x97CE +0x8FE7E1 0x97D0 +0x8FE7E2 0x97D1 +0x8FE7E3 0x97D4 +0x8FE7E4 0x97D7 +0x8FE7E5 0x97D8 +0x8FE7E6 0x97D9 +0x8FE7E7 0x97DD +0x8FE7E8 0x97DE +0x8FE7E9 0x97E0 +0x8FE7EA 0x97DB +0x8FE7EB 0x97E1 +0x8FE7EC 0x97E4 +0x8FE7ED 0x97EF +0x8FE7EE 0x97F1 +0x8FE7EF 0x97F4 +0x8FE7F0 0x97F7 +0x8FE7F1 0x97F8 +0x8FE7F2 0x97FA +0x8FE7F3 0x9807 +0x8FE7F4 0x980A +0x8FE7F5 0x9819 +0x8FE7F6 0x980D +0x8FE7F7 0x980E +0x8FE7F8 0x9814 +0x8FE7F9 0x9816 +0x8FE7FA 0x981C +0x8FE7FB 0x981E +0x8FE7FC 0x9820 +0x8FE7FD 0x9823 +0x8FE7FE 0x9826 +0x8FE8A1 0x982B +0x8FE8A2 0x982E +0x8FE8A3 0x982F +0x8FE8A4 0x9830 +0x8FE8A5 0x9832 +0x8FE8A6 0x9833 +0x8FE8A7 0x9835 +0x8FE8A8 0x9825 +0x8FE8A9 0x983E +0x8FE8AA 0x9844 +0x8FE8AB 0x9847 +0x8FE8AC 0x984A +0x8FE8AD 0x9851 +0x8FE8AE 0x9852 +0x8FE8AF 0x9853 +0x8FE8B0 0x9856 +0x8FE8B1 0x9857 +0x8FE8B2 0x9859 +0x8FE8B3 0x985A +0x8FE8B4 0x9862 +0x8FE8B5 0x9863 +0x8FE8B6 0x9865 +0x8FE8B7 0x9866 +0x8FE8B8 0x986A +0x8FE8B9 0x986C +0x8FE8BA 0x98AB +0x8FE8BB 0x98AD +0x8FE8BC 0x98AE +0x8FE8BD 0x98B0 +0x8FE8BE 0x98B4 +0x8FE8BF 0x98B7 +0x8FE8C0 0x98B8 +0x8FE8C1 0x98BA +0x8FE8C2 0x98BB +0x8FE8C3 0x98BF +0x8FE8C4 0x98C2 +0x8FE8C5 0x98C5 +0x8FE8C6 0x98C8 +0x8FE8C7 0x98CC +0x8FE8C8 0x98E1 +0x8FE8C9 0x98E3 +0x8FE8CA 0x98E5 +0x8FE8CB 0x98E6 +0x8FE8CC 0x98E7 +0x8FE8CD 0x98EA +0x8FE8CE 0x98F3 +0x8FE8CF 0x98F6 +0x8FE8D0 0x9902 +0x8FE8D1 0x9907 +0x8FE8D2 0x9908 +0x8FE8D3 0x9911 +0x8FE8D4 0x9915 +0x8FE8D5 0x9916 +0x8FE8D6 0x9917 +0x8FE8D7 0x991A +0x8FE8D8 0x991B +0x8FE8D9 0x991C +0x8FE8DA 0x991F +0x8FE8DB 0x9922 +0x8FE8DC 0x9926 +0x8FE8DD 0x9927 +0x8FE8DE 0x992B +0x8FE8DF 0x9931 +0x8FE8E0 0x9932 +0x8FE8E1 0x9933 +0x8FE8E2 0x9934 +0x8FE8E3 0x9935 +0x8FE8E4 0x9939 +0x8FE8E5 0x993A +0x8FE8E6 0x993B +0x8FE8E7 0x993C +0x8FE8E8 0x9940 +0x8FE8E9 0x9941 +0x8FE8EA 0x9946 +0x8FE8EB 0x9947 +0x8FE8EC 0x9948 +0x8FE8ED 0x994D +0x8FE8EE 0x994E +0x8FE8EF 0x9954 +0x8FE8F0 0x9958 +0x8FE8F1 0x9959 +0x8FE8F2 0x995B +0x8FE8F3 0x995C +0x8FE8F4 0x995E +0x8FE8F5 0x995F +0x8FE8F6 0x9960 +0x8FE8F7 0x999B +0x8FE8F8 0x999D +0x8FE8F9 0x999F +0x8FE8FA 0x99A6 +0x8FE8FB 0x99B0 +0x8FE8FC 0x99B1 +0x8FE8FD 0x99B2 +0x8FE8FE 0x99B5 +0x8FE9A1 0x99B9 +0x8FE9A2 0x99BA +0x8FE9A3 0x99BD +0x8FE9A4 0x99BF +0x8FE9A5 0x99C3 +0x8FE9A6 0x99C9 +0x8FE9A7 0x99D3 +0x8FE9A8 0x99D4 +0x8FE9A9 0x99D9 +0x8FE9AA 0x99DA +0x8FE9AB 0x99DC +0x8FE9AC 0x99DE +0x8FE9AD 0x99E7 +0x8FE9AE 0x99EA +0x8FE9AF 0x99EB +0x8FE9B0 0x99EC +0x8FE9B1 0x99F0 +0x8FE9B2 0x99F4 +0x8FE9B3 0x99F5 +0x8FE9B4 0x99F9 +0x8FE9B5 0x99FD +0x8FE9B6 0x99FE +0x8FE9B7 0x9A02 +0x8FE9B8 0x9A03 +0x8FE9B9 0x9A04 +0x8FE9BA 0x9A0B +0x8FE9BB 0x9A0C +0x8FE9BC 0x9A10 +0x8FE9BD 0x9A11 +0x8FE9BE 0x9A16 +0x8FE9BF 0x9A1E +0x8FE9C0 0x9A20 +0x8FE9C1 0x9A22 +0x8FE9C2 0x9A23 +0x8FE9C3 0x9A24 +0x8FE9C4 0x9A27 +0x8FE9C5 0x9A2D +0x8FE9C6 0x9A2E +0x8FE9C7 0x9A33 +0x8FE9C8 0x9A35 +0x8FE9C9 0x9A36 +0x8FE9CA 0x9A38 +0x8FE9CB 0x9A47 +0x8FE9CC 0x9A41 +0x8FE9CD 0x9A44 +0x8FE9CE 0x9A4A +0x8FE9CF 0x9A4B +0x8FE9D0 0x9A4C +0x8FE9D1 0x9A4E +0x8FE9D2 0x9A51 +0x8FE9D3 0x9A54 +0x8FE9D4 0x9A56 +0x8FE9D5 0x9A5D +0x8FE9D6 0x9AAA +0x8FE9D7 0x9AAC +0x8FE9D8 0x9AAE +0x8FE9D9 0x9AAF +0x8FE9DA 0x9AB2 +0x8FE9DB 0x9AB4 +0x8FE9DC 0x9AB5 +0x8FE9DD 0x9AB6 +0x8FE9DE 0x9AB9 +0x8FE9DF 0x9ABB +0x8FE9E0 0x9ABE +0x8FE9E1 0x9ABF +0x8FE9E2 0x9AC1 +0x8FE9E3 0x9AC3 +0x8FE9E4 0x9AC6 +0x8FE9E5 0x9AC8 +0x8FE9E6 0x9ACE +0x8FE9E7 0x9AD0 +0x8FE9E8 0x9AD2 +0x8FE9E9 0x9AD5 +0x8FE9EA 0x9AD6 +0x8FE9EB 0x9AD7 +0x8FE9EC 0x9ADB +0x8FE9ED 0x9ADC +0x8FE9EE 0x9AE0 +0x8FE9EF 0x9AE4 +0x8FE9F0 0x9AE5 +0x8FE9F1 0x9AE7 +0x8FE9F2 0x9AE9 +0x8FE9F3 0x9AEC +0x8FE9F4 0x9AF2 +0x8FE9F5 0x9AF3 +0x8FE9F6 0x9AF5 +0x8FE9F7 0x9AF9 +0x8FE9F8 0x9AFA +0x8FE9F9 0x9AFD +0x8FE9FA 0x9AFF +0x8FE9FB 0x9B00 +0x8FE9FC 0x9B01 +0x8FE9FD 0x9B02 +0x8FE9FE 0x9B03 +0x8FEAA1 0x9B04 +0x8FEAA2 0x9B05 +0x8FEAA3 0x9B08 +0x8FEAA4 0x9B09 +0x8FEAA5 0x9B0B +0x8FEAA6 0x9B0C +0x8FEAA7 0x9B0D +0x8FEAA8 0x9B0E +0x8FEAA9 0x9B10 +0x8FEAAA 0x9B12 +0x8FEAAB 0x9B16 +0x8FEAAC 0x9B19 +0x8FEAAD 0x9B1B +0x8FEAAE 0x9B1C +0x8FEAAF 0x9B20 +0x8FEAB0 0x9B26 +0x8FEAB1 0x9B2B +0x8FEAB2 0x9B2D +0x8FEAB3 0x9B33 +0x8FEAB4 0x9B34 +0x8FEAB5 0x9B35 +0x8FEAB6 0x9B37 +0x8FEAB7 0x9B39 +0x8FEAB8 0x9B3A +0x8FEAB9 0x9B3D +0x8FEABA 0x9B48 +0x8FEABB 0x9B4B +0x8FEABC 0x9B4C +0x8FEABD 0x9B55 +0x8FEABE 0x9B56 +0x8FEABF 0x9B57 +0x8FEAC0 0x9B5B +0x8FEAC1 0x9B5E +0x8FEAC2 0x9B61 +0x8FEAC3 0x9B63 +0x8FEAC4 0x9B65 +0x8FEAC5 0x9B66 +0x8FEAC6 0x9B68 +0x8FEAC7 0x9B6A +0x8FEAC8 0x9B6B +0x8FEAC9 0x9B6C +0x8FEACA 0x9B6D +0x8FEACB 0x9B6E +0x8FEACC 0x9B73 +0x8FEACD 0x9B75 +0x8FEACE 0x9B77 +0x8FEACF 0x9B78 +0x8FEAD0 0x9B79 +0x8FEAD1 0x9B7F +0x8FEAD2 0x9B80 +0x8FEAD3 0x9B84 +0x8FEAD4 0x9B85 +0x8FEAD5 0x9B86 +0x8FEAD6 0x9B87 +0x8FEAD7 0x9B89 +0x8FEAD8 0x9B8A +0x8FEAD9 0x9B8B +0x8FEADA 0x9B8D +0x8FEADB 0x9B8F +0x8FEADC 0x9B90 +0x8FEADD 0x9B94 +0x8FEADE 0x9B9A +0x8FEADF 0x9B9D +0x8FEAE0 0x9B9E +0x8FEAE1 0x9BA6 +0x8FEAE2 0x9BA7 +0x8FEAE3 0x9BA9 +0x8FEAE4 0x9BAC +0x8FEAE5 0x9BB0 +0x8FEAE6 0x9BB1 +0x8FEAE7 0x9BB2 +0x8FEAE8 0x9BB7 +0x8FEAE9 0x9BB8 +0x8FEAEA 0x9BBB +0x8FEAEB 0x9BBC +0x8FEAEC 0x9BBE +0x8FEAED 0x9BBF +0x8FEAEE 0x9BC1 +0x8FEAEF 0x9BC7 +0x8FEAF0 0x9BC8 +0x8FEAF1 0x9BCE +0x8FEAF2 0x9BD0 +0x8FEAF3 0x9BD7 +0x8FEAF4 0x9BD8 +0x8FEAF5 0x9BDD +0x8FEAF6 0x9BDF +0x8FEAF7 0x9BE5 +0x8FEAF8 0x9BE7 +0x8FEAF9 0x9BEA +0x8FEAFA 0x9BEB +0x8FEAFB 0x9BEF +0x8FEAFC 0x9BF3 +0x8FEAFD 0x9BF7 +0x8FEAFE 0x9BF8 +0x8FEBA1 0x9BF9 +0x8FEBA2 0x9BFA +0x8FEBA3 0x9BFD +0x8FEBA4 0x9BFF +0x8FEBA5 0x9C00 +0x8FEBA6 0x9C02 +0x8FEBA7 0x9C0B +0x8FEBA8 0x9C0F +0x8FEBA9 0x9C11 +0x8FEBAA 0x9C16 +0x8FEBAB 0x9C18 +0x8FEBAC 0x9C19 +0x8FEBAD 0x9C1A +0x8FEBAE 0x9C1C +0x8FEBAF 0x9C1E +0x8FEBB0 0x9C22 +0x8FEBB1 0x9C23 +0x8FEBB2 0x9C26 +0x8FEBB3 0x9C27 +0x8FEBB4 0x9C28 +0x8FEBB5 0x9C29 +0x8FEBB6 0x9C2A +0x8FEBB7 0x9C31 +0x8FEBB8 0x9C35 +0x8FEBB9 0x9C36 +0x8FEBBA 0x9C37 +0x8FEBBB 0x9C3D +0x8FEBBC 0x9C41 +0x8FEBBD 0x9C43 +0x8FEBBE 0x9C44 +0x8FEBBF 0x9C45 +0x8FEBC0 0x9C49 +0x8FEBC1 0x9C4A +0x8FEBC2 0x9C4E +0x8FEBC3 0x9C4F +0x8FEBC4 0x9C50 +0x8FEBC5 0x9C53 +0x8FEBC6 0x9C54 +0x8FEBC7 0x9C56 +0x8FEBC8 0x9C58 +0x8FEBC9 0x9C5B +0x8FEBCA 0x9C5D +0x8FEBCB 0x9C5E +0x8FEBCC 0x9C5F +0x8FEBCD 0x9C63 +0x8FEBCE 0x9C69 +0x8FEBCF 0x9C6A +0x8FEBD0 0x9C5C +0x8FEBD1 0x9C6B +0x8FEBD2 0x9C68 +0x8FEBD3 0x9C6E +0x8FEBD4 0x9C70 +0x8FEBD5 0x9C72 +0x8FEBD6 0x9C75 +0x8FEBD7 0x9C77 +0x8FEBD8 0x9C7B +0x8FEBD9 0x9CE6 +0x8FEBDA 0x9CF2 +0x8FEBDB 0x9CF7 +0x8FEBDC 0x9CF9 +0x8FEBDD 0x9D0B +0x8FEBDE 0x9D02 +0x8FEBDF 0x9D11 +0x8FEBE0 0x9D17 +0x8FEBE1 0x9D18 +0x8FEBE2 0x9D1C +0x8FEBE3 0x9D1D +0x8FEBE4 0x9D1E +0x8FEBE5 0x9D2F +0x8FEBE6 0x9D30 +0x8FEBE7 0x9D32 +0x8FEBE8 0x9D33 +0x8FEBE9 0x9D34 +0x8FEBEA 0x9D3A +0x8FEBEB 0x9D3C +0x8FEBEC 0x9D45 +0x8FEBED 0x9D3D +0x8FEBEE 0x9D42 +0x8FEBEF 0x9D43 +0x8FEBF0 0x9D47 +0x8FEBF1 0x9D4A +0x8FEBF2 0x9D53 +0x8FEBF3 0x9D54 +0x8FEBF4 0x9D5F +0x8FEBF5 0x9D63 +0x8FEBF6 0x9D62 +0x8FEBF7 0x9D65 +0x8FEBF8 0x9D69 +0x8FEBF9 0x9D6A +0x8FEBFA 0x9D6B +0x8FEBFB 0x9D70 +0x8FEBFC 0x9D76 +0x8FEBFD 0x9D77 +0x8FEBFE 0x9D7B +0x8FECA1 0x9D7C +0x8FECA2 0x9D7E +0x8FECA3 0x9D83 +0x8FECA4 0x9D84 +0x8FECA5 0x9D86 +0x8FECA6 0x9D8A +0x8FECA7 0x9D8D +0x8FECA8 0x9D8E +0x8FECA9 0x9D92 +0x8FECAA 0x9D93 +0x8FECAB 0x9D95 +0x8FECAC 0x9D96 +0x8FECAD 0x9D97 +0x8FECAE 0x9D98 +0x8FECAF 0x9DA1 +0x8FECB0 0x9DAA +0x8FECB1 0x9DAC +0x8FECB2 0x9DAE +0x8FECB3 0x9DB1 +0x8FECB4 0x9DB5 +0x8FECB5 0x9DB9 +0x8FECB6 0x9DBC +0x8FECB7 0x9DBF +0x8FECB8 0x9DC3 +0x8FECB9 0x9DC7 +0x8FECBA 0x9DC9 +0x8FECBB 0x9DCA +0x8FECBC 0x9DD4 +0x8FECBD 0x9DD5 +0x8FECBE 0x9DD6 +0x8FECBF 0x9DD7 +0x8FECC0 0x9DDA +0x8FECC1 0x9DDE +0x8FECC2 0x9DDF +0x8FECC3 0x9DE0 +0x8FECC4 0x9DE5 +0x8FECC5 0x9DE7 +0x8FECC6 0x9DE9 +0x8FECC7 0x9DEB +0x8FECC8 0x9DEE +0x8FECC9 0x9DF0 +0x8FECCA 0x9DF3 +0x8FECCB 0x9DF4 +0x8FECCC 0x9DFE +0x8FECCD 0x9E0A +0x8FECCE 0x9E02 +0x8FECCF 0x9E07 +0x8FECD0 0x9E0E +0x8FECD1 0x9E10 +0x8FECD2 0x9E11 +0x8FECD3 0x9E12 +0x8FECD4 0x9E15 +0x8FECD5 0x9E16 +0x8FECD6 0x9E19 +0x8FECD7 0x9E1C +0x8FECD8 0x9E1D +0x8FECD9 0x9E7A +0x8FECDA 0x9E7B +0x8FECDB 0x9E7C +0x8FECDC 0x9E80 +0x8FECDD 0x9E82 +0x8FECDE 0x9E83 +0x8FECDF 0x9E84 +0x8FECE0 0x9E85 +0x8FECE1 0x9E87 +0x8FECE2 0x9E8E +0x8FECE3 0x9E8F +0x8FECE4 0x9E96 +0x8FECE5 0x9E98 +0x8FECE6 0x9E9B +0x8FECE7 0x9E9E +0x8FECE8 0x9EA4 +0x8FECE9 0x9EA8 +0x8FECEA 0x9EAC +0x8FECEB 0x9EAE +0x8FECEC 0x9EAF +0x8FECED 0x9EB0 +0x8FECEE 0x9EB3 +0x8FECEF 0x9EB4 +0x8FECF0 0x9EB5 +0x8FECF1 0x9EC6 +0x8FECF2 0x9EC8 +0x8FECF3 0x9ECB +0x8FECF4 0x9ED5 +0x8FECF5 0x9EDF +0x8FECF6 0x9EE4 +0x8FECF7 0x9EE7 +0x8FECF8 0x9EEC +0x8FECF9 0x9EED +0x8FECFA 0x9EEE +0x8FECFB 0x9EF0 +0x8FECFC 0x9EF1 +0x8FECFD 0x9EF2 +0x8FECFE 0x9EF5 +0x8FEDA1 0x9EF8 +0x8FEDA2 0x9EFF +0x8FEDA3 0x9F02 +0x8FEDA4 0x9F03 +0x8FEDA5 0x9F09 +0x8FEDA6 0x9F0F +0x8FEDA7 0x9F10 +0x8FEDA8 0x9F11 +0x8FEDA9 0x9F12 +0x8FEDAA 0x9F14 +0x8FEDAB 0x9F16 +0x8FEDAC 0x9F17 +0x8FEDAD 0x9F19 +0x8FEDAE 0x9F1A +0x8FEDAF 0x9F1B +0x8FEDB0 0x9F1F +0x8FEDB1 0x9F22 +0x8FEDB2 0x9F26 +0x8FEDB3 0x9F2A +0x8FEDB4 0x9F2B +0x8FEDB5 0x9F2F +0x8FEDB6 0x9F31 +0x8FEDB7 0x9F32 +0x8FEDB8 0x9F34 +0x8FEDB9 0x9F37 +0x8FEDBA 0x9F39 +0x8FEDBB 0x9F3A +0x8FEDBC 0x9F3C +0x8FEDBD 0x9F3D +0x8FEDBE 0x9F3F +0x8FEDBF 0x9F41 +0x8FEDC0 0x9F43 +0x8FEDC1 0x9F44 +0x8FEDC2 0x9F45 +0x8FEDC3 0x9F46 +0x8FEDC4 0x9F47 +0x8FEDC5 0x9F53 +0x8FEDC6 0x9F55 +0x8FEDC7 0x9F56 +0x8FEDC8 0x9F57 +0x8FEDC9 0x9F58 +0x8FEDCA 0x9F5A +0x8FEDCB 0x9F5D +0x8FEDCC 0x9F5E +0x8FEDCD 0x9F68 +0x8FEDCE 0x9F69 +0x8FEDCF 0x9F6D +0x8FEDD0 0x9F6E +0x8FEDD1 0x9F6F +0x8FEDD2 0x9F70 +0x8FEDD3 0x9F71 +0x8FEDD4 0x9F73 +0x8FEDD5 0x9F75 +0x8FEDD6 0x9F7A +0x8FEDD7 0x9F7D +0x8FEDD8 0x9F8F +0x8FEDD9 0x9F90 +0x8FEDDA 0x9F91 +0x8FEDDB 0x9F92 +0x8FEDDC 0x9F94 +0x8FEDDD 0x9F96 +0x8FEDDE 0x9F97 +0x8FEDDF 0x9F9E +0x8FEDE0 0x9FA1 +0x8FEDE1 0x9FA2 +0x8FEDE2 0x9FA3 +0x8FEDE3 0x9FA5 +0xA1A1 0x3000 +0xA1A2 0x3001 +0xA1A3 0x3002 +0xA1A4 0xFF0C +0xA1A5 0xFF0E +0xA1A6 0x30FB +0xA1A7 0xFF1A +0xA1A8 0xFF1B +0xA1A9 0xFF1F +0xA1AA 0xFF01 +0xA1AB 0x309B +0xA1AC 0x309C +0xA1AD 0x00B4 +0xA1AE 0xFF40 +0xA1AF 0x00A8 +0xA1B0 0xFF3E +0xA1B1 0xFFE3 +0xA1B2 0xFF3F +0xA1B3 0x30FD +0xA1B4 0x30FE +0xA1B5 0x309D +0xA1B6 0x309E +0xA1B7 0x3003 +0xA1B8 0x4EDD +0xA1B9 0x3005 +0xA1BA 0x3006 +0xA1BB 0x3007 +0xA1BC 0x30FC +0xA1BD 0x2015 +0xA1BE 0x2010 +0xA1BF 0xFF0F +0xA1C0 0x005C +0xA1C1 0x301C +0xA1C2 0x2016 +0xA1C3 0xFF5C +0xA1C4 0x2026 +0xA1C5 0x2025 +0xA1C6 0x2018 +0xA1C7 0x2019 +0xA1C8 0x201C +0xA1C9 0x201D +0xA1CA 0xFF08 +0xA1CB 0xFF09 +0xA1CC 0x3014 +0xA1CD 0x3015 +0xA1CE 0xFF3B +0xA1CF 0xFF3D +0xA1D0 0xFF5B +0xA1D1 0xFF5D +0xA1D2 0x3008 +0xA1D3 0x3009 +0xA1D4 0x300A +0xA1D5 0x300B +0xA1D6 0x300C +0xA1D7 0x300D +0xA1D8 0x300E +0xA1D9 0x300F +0xA1DA 0x3010 +0xA1DB 0x3011 +0xA1DC 0xFF0B +0xA1DD 0x2212 +0xA1DE 0x00B1 +0xA1DF 0x00D7 +0xA1E0 0x00F7 +0xA1E1 0xFF1D +0xA1E2 0x2260 +0xA1E3 0xFF1C +0xA1E4 0xFF1E +0xA1E5 0x2266 +0xA1E6 0x2267 +0xA1E7 0x221E +0xA1E8 0x2234 +0xA1E9 0x2642 +0xA1EA 0x2640 +0xA1EB 0x00B0 +0xA1EC 0x2032 +0xA1ED 0x2033 +0xA1EE 0x2103 +0xA1EF 0xFFE5 +0xA1F0 0xFF04 +0xA1F1 0x00A2 +0xA1F2 0x00A3 +0xA1F3 0xFF05 +0xA1F4 0xFF03 +0xA1F5 0xFF06 +0xA1F6 0xFF0A +0xA1F7 0xFF20 +0xA1F8 0x00A7 +0xA1F9 0x2606 +0xA1FA 0x2605 +0xA1FB 0x25CB +0xA1FC 0x25CF +0xA1FD 0x25CE +0xA1FE 0x25C7 +0xA2A1 0x25C6 +0xA2A2 0x25A1 +0xA2A3 0x25A0 +0xA2A4 0x25B3 +0xA2A5 0x25B2 +0xA2A6 0x25BD +0xA2A7 0x25BC +0xA2A8 0x203B +0xA2A9 0x3012 +0xA2AA 0x2192 +0xA2AB 0x2190 +0xA2AC 0x2191 +0xA2AD 0x2193 +0xA2AE 0x3013 +0xA2BA 0x2208 +0xA2BB 0x220B +0xA2BC 0x2286 +0xA2BD 0x2287 +0xA2BE 0x2282 +0xA2BF 0x2283 +0xA2C0 0x222A +0xA2C1 0x2229 +0xA2CA 0x2227 +0xA2CB 0x2228 +0xA2CC 0x00AC +0xA2CD 0x21D2 +0xA2CE 0x21D4 +0xA2CF 0x2200 +0xA2D0 0x2203 +0xA2DC 0x2220 +0xA2DD 0x22A5 +0xA2DE 0x2312 +0xA2DF 0x2202 +0xA2E0 0x2207 +0xA2E1 0x2261 +0xA2E2 0x2252 +0xA2E3 0x226A +0xA2E4 0x226B +0xA2E5 0x221A +0xA2E6 0x223D +0xA2E7 0x221D +0xA2E8 0x2235 +0xA2E9 0x222B +0xA2EA 0x222C +0xA2F2 0x212B +0xA2F3 0x2030 +0xA2F4 0x266F +0xA2F5 0x266D +0xA2F6 0x266A +0xA2F7 0x2020 +0xA2F8 0x2021 +0xA2F9 0x00B6 +0xA2FE 0x25EF +0xA3B0 0xFF10 +0xA3B1 0xFF11 +0xA3B2 0xFF12 +0xA3B3 0xFF13 +0xA3B4 0xFF14 +0xA3B5 0xFF15 +0xA3B6 0xFF16 +0xA3B7 0xFF17 +0xA3B8 0xFF18 +0xA3B9 0xFF19 +0xA3C1 0xFF21 +0xA3C2 0xFF22 +0xA3C3 0xFF23 +0xA3C4 0xFF24 +0xA3C5 0xFF25 +0xA3C6 0xFF26 +0xA3C7 0xFF27 +0xA3C8 0xFF28 +0xA3C9 0xFF29 +0xA3CA 0xFF2A +0xA3CB 0xFF2B +0xA3CC 0xFF2C +0xA3CD 0xFF2D +0xA3CE 0xFF2E +0xA3CF 0xFF2F +0xA3D0 0xFF30 +0xA3D1 0xFF31 +0xA3D2 0xFF32 +0xA3D3 0xFF33 +0xA3D4 0xFF34 +0xA3D5 0xFF35 +0xA3D6 0xFF36 +0xA3D7 0xFF37 +0xA3D8 0xFF38 +0xA3D9 0xFF39 +0xA3DA 0xFF3A +0xA3E1 0xFF41 +0xA3E2 0xFF42 +0xA3E3 0xFF43 +0xA3E4 0xFF44 +0xA3E5 0xFF45 +0xA3E6 0xFF46 +0xA3E7 0xFF47 +0xA3E8 0xFF48 +0xA3E9 0xFF49 +0xA3EA 0xFF4A +0xA3EB 0xFF4B +0xA3EC 0xFF4C +0xA3ED 0xFF4D +0xA3EE 0xFF4E +0xA3EF 0xFF4F +0xA3F0 0xFF50 +0xA3F1 0xFF51 +0xA3F2 0xFF52 +0xA3F3 0xFF53 +0xA3F4 0xFF54 +0xA3F5 0xFF55 +0xA3F6 0xFF56 +0xA3F7 0xFF57 +0xA3F8 0xFF58 +0xA3F9 0xFF59 +0xA3FA 0xFF5A +0xA4A1 0x3041 +0xA4A2 0x3042 +0xA4A3 0x3043 +0xA4A4 0x3044 +0xA4A5 0x3045 +0xA4A6 0x3046 +0xA4A7 0x3047 +0xA4A8 0x3048 +0xA4A9 0x3049 +0xA4AA 0x304A +0xA4AB 0x304B +0xA4AC 0x304C +0xA4AD 0x304D +0xA4AE 0x304E +0xA4AF 0x304F +0xA4B0 0x3050 +0xA4B1 0x3051 +0xA4B2 0x3052 +0xA4B3 0x3053 +0xA4B4 0x3054 +0xA4B5 0x3055 +0xA4B6 0x3056 +0xA4B7 0x3057 +0xA4B8 0x3058 +0xA4B9 0x3059 +0xA4BA 0x305A +0xA4BB 0x305B +0xA4BC 0x305C +0xA4BD 0x305D +0xA4BE 0x305E +0xA4BF 0x305F +0xA4C0 0x3060 +0xA4C1 0x3061 +0xA4C2 0x3062 +0xA4C3 0x3063 +0xA4C4 0x3064 +0xA4C5 0x3065 +0xA4C6 0x3066 +0xA4C7 0x3067 +0xA4C8 0x3068 +0xA4C9 0x3069 +0xA4CA 0x306A +0xA4CB 0x306B +0xA4CC 0x306C +0xA4CD 0x306D +0xA4CE 0x306E +0xA4CF 0x306F +0xA4D0 0x3070 +0xA4D1 0x3071 +0xA4D2 0x3072 +0xA4D3 0x3073 +0xA4D4 0x3074 +0xA4D5 0x3075 +0xA4D6 0x3076 +0xA4D7 0x3077 +0xA4D8 0x3078 +0xA4D9 0x3079 +0xA4DA 0x307A +0xA4DB 0x307B +0xA4DC 0x307C +0xA4DD 0x307D +0xA4DE 0x307E +0xA4DF 0x307F +0xA4E0 0x3080 +0xA4E1 0x3081 +0xA4E2 0x3082 +0xA4E3 0x3083 +0xA4E4 0x3084 +0xA4E5 0x3085 +0xA4E6 0x3086 +0xA4E7 0x3087 +0xA4E8 0x3088 +0xA4E9 0x3089 +0xA4EA 0x308A +0xA4EB 0x308B +0xA4EC 0x308C +0xA4ED 0x308D +0xA4EE 0x308E +0xA4EF 0x308F +0xA4F0 0x3090 +0xA4F1 0x3091 +0xA4F2 0x3092 +0xA4F3 0x3093 +0xA5A1 0x30A1 +0xA5A2 0x30A2 +0xA5A3 0x30A3 +0xA5A4 0x30A4 +0xA5A5 0x30A5 +0xA5A6 0x30A6 +0xA5A7 0x30A7 +0xA5A8 0x30A8 +0xA5A9 0x30A9 +0xA5AA 0x30AA +0xA5AB 0x30AB +0xA5AC 0x30AC +0xA5AD 0x30AD +0xA5AE 0x30AE +0xA5AF 0x30AF +0xA5B0 0x30B0 +0xA5B1 0x30B1 +0xA5B2 0x30B2 +0xA5B3 0x30B3 +0xA5B4 0x30B4 +0xA5B5 0x30B5 +0xA5B6 0x30B6 +0xA5B7 0x30B7 +0xA5B8 0x30B8 +0xA5B9 0x30B9 +0xA5BA 0x30BA +0xA5BB 0x30BB +0xA5BC 0x30BC +0xA5BD 0x30BD +0xA5BE 0x30BE +0xA5BF 0x30BF +0xA5C0 0x30C0 +0xA5C1 0x30C1 +0xA5C2 0x30C2 +0xA5C3 0x30C3 +0xA5C4 0x30C4 +0xA5C5 0x30C5 +0xA5C6 0x30C6 +0xA5C7 0x30C7 +0xA5C8 0x30C8 +0xA5C9 0x30C9 +0xA5CA 0x30CA +0xA5CB 0x30CB +0xA5CC 0x30CC +0xA5CD 0x30CD +0xA5CE 0x30CE +0xA5CF 0x30CF +0xA5D0 0x30D0 +0xA5D1 0x30D1 +0xA5D2 0x30D2 +0xA5D3 0x30D3 +0xA5D4 0x30D4 +0xA5D5 0x30D5 +0xA5D6 0x30D6 +0xA5D7 0x30D7 +0xA5D8 0x30D8 +0xA5D9 0x30D9 +0xA5DA 0x30DA +0xA5DB 0x30DB +0xA5DC 0x30DC +0xA5DD 0x30DD +0xA5DE 0x30DE +0xA5DF 0x30DF +0xA5E0 0x30E0 +0xA5E1 0x30E1 +0xA5E2 0x30E2 +0xA5E3 0x30E3 +0xA5E4 0x30E4 +0xA5E5 0x30E5 +0xA5E6 0x30E6 +0xA5E7 0x30E7 +0xA5E8 0x30E8 +0xA5E9 0x30E9 +0xA5EA 0x30EA +0xA5EB 0x30EB +0xA5EC 0x30EC +0xA5ED 0x30ED +0xA5EE 0x30EE +0xA5EF 0x30EF +0xA5F0 0x30F0 +0xA5F1 0x30F1 +0xA5F2 0x30F2 +0xA5F3 0x30F3 +0xA5F4 0x30F4 +0xA5F5 0x30F5 +0xA5F6 0x30F6 +0xA6A1 0x0391 +0xA6A2 0x0392 +0xA6A3 0x0393 +0xA6A4 0x0394 +0xA6A5 0x0395 +0xA6A6 0x0396 +0xA6A7 0x0397 +0xA6A8 0x0398 +0xA6A9 0x0399 +0xA6AA 0x039A +0xA6AB 0x039B +0xA6AC 0x039C +0xA6AD 0x039D +0xA6AE 0x039E +0xA6AF 0x039F +0xA6B0 0x03A0 +0xA6B1 0x03A1 +0xA6B2 0x03A3 +0xA6B3 0x03A4 +0xA6B4 0x03A5 +0xA6B5 0x03A6 +0xA6B6 0x03A7 +0xA6B7 0x03A8 +0xA6B8 0x03A9 +0xA6C1 0x03B1 +0xA6C2 0x03B2 +0xA6C3 0x03B3 +0xA6C4 0x03B4 +0xA6C5 0x03B5 +0xA6C6 0x03B6 +0xA6C7 0x03B7 +0xA6C8 0x03B8 +0xA6C9 0x03B9 +0xA6CA 0x03BA +0xA6CB 0x03BB +0xA6CC 0x03BC +0xA6CD 0x03BD +0xA6CE 0x03BE +0xA6CF 0x03BF +0xA6D0 0x03C0 +0xA6D1 0x03C1 +0xA6D2 0x03C3 +0xA6D3 0x03C4 +0xA6D4 0x03C5 +0xA6D5 0x03C6 +0xA6D6 0x03C7 +0xA6D7 0x03C8 +0xA6D8 0x03C9 +0xA7A1 0x0410 +0xA7A2 0x0411 +0xA7A3 0x0412 +0xA7A4 0x0413 +0xA7A5 0x0414 +0xA7A6 0x0415 +0xA7A7 0x0401 +0xA7A8 0x0416 +0xA7A9 0x0417 +0xA7AA 0x0418 +0xA7AB 0x0419 +0xA7AC 0x041A +0xA7AD 0x041B +0xA7AE 0x041C +0xA7AF 0x041D +0xA7B0 0x041E +0xA7B1 0x041F +0xA7B2 0x0420 +0xA7B3 0x0421 +0xA7B4 0x0422 +0xA7B5 0x0423 +0xA7B6 0x0424 +0xA7B7 0x0425 +0xA7B8 0x0426 +0xA7B9 0x0427 +0xA7BA 0x0428 +0xA7BB 0x0429 +0xA7BC 0x042A +0xA7BD 0x042B +0xA7BE 0x042C +0xA7BF 0x042D +0xA7C0 0x042E +0xA7C1 0x042F +0xA7D1 0x0430 +0xA7D2 0x0431 +0xA7D3 0x0432 +0xA7D4 0x0433 +0xA7D5 0x0434 +0xA7D6 0x0435 +0xA7D7 0x0451 +0xA7D8 0x0436 +0xA7D9 0x0437 +0xA7DA 0x0438 +0xA7DB 0x0439 +0xA7DC 0x043A +0xA7DD 0x043B +0xA7DE 0x043C +0xA7DF 0x043D +0xA7E0 0x043E +0xA7E1 0x043F +0xA7E2 0x0440 +0xA7E3 0x0441 +0xA7E4 0x0442 +0xA7E5 0x0443 +0xA7E6 0x0444 +0xA7E7 0x0445 +0xA7E8 0x0446 +0xA7E9 0x0447 +0xA7EA 0x0448 +0xA7EB 0x0449 +0xA7EC 0x044A +0xA7ED 0x044B +0xA7EE 0x044C +0xA7EF 0x044D +0xA7F0 0x044E +0xA7F1 0x044F +0xA8A1 0x2500 +0xA8A2 0x2502 +0xA8A3 0x250C +0xA8A4 0x2510 +0xA8A5 0x2518 +0xA8A6 0x2514 +0xA8A7 0x251C +0xA8A8 0x252C +0xA8A9 0x2524 +0xA8AA 0x2534 +0xA8AB 0x253C +0xA8AC 0x2501 +0xA8AD 0x2503 +0xA8AE 0x250F +0xA8AF 0x2513 +0xA8B0 0x251B +0xA8B1 0x2517 +0xA8B2 0x2523 +0xA8B3 0x2533 +0xA8B4 0x252B +0xA8B5 0x253B +0xA8B6 0x254B +0xA8B7 0x2520 +0xA8B8 0x252F +0xA8B9 0x2528 +0xA8BA 0x2537 +0xA8BB 0x253F +0xA8BC 0x251D +0xA8BD 0x2530 +0xA8BE 0x2525 +0xA8BF 0x2538 +0xA8C0 0x2542 +0xB0A1 0x4E9C +0xB0A2 0x5516 +0xB0A3 0x5A03 +0xB0A4 0x963F +0xB0A5 0x54C0 +0xB0A6 0x611B +0xB0A7 0x6328 +0xB0A8 0x59F6 +0xB0A9 0x9022 +0xB0AA 0x8475 +0xB0AB 0x831C +0xB0AC 0x7A50 +0xB0AD 0x60AA +0xB0AE 0x63E1 +0xB0AF 0x6E25 +0xB0B0 0x65ED +0xB0B1 0x8466 +0xB0B2 0x82A6 +0xB0B3 0x9BF5 +0xB0B4 0x6893 +0xB0B5 0x5727 +0xB0B6 0x65A1 +0xB0B7 0x6271 +0xB0B8 0x5B9B +0xB0B9 0x59D0 +0xB0BA 0x867B +0xB0BB 0x98F4 +0xB0BC 0x7D62 +0xB0BD 0x7DBE +0xB0BE 0x9B8E +0xB0BF 0x6216 +0xB0C0 0x7C9F +0xB0C1 0x88B7 +0xB0C2 0x5B89 +0xB0C3 0x5EB5 +0xB0C4 0x6309 +0xB0C5 0x6697 +0xB0C6 0x6848 +0xB0C7 0x95C7 +0xB0C8 0x978D +0xB0C9 0x674F +0xB0CA 0x4EE5 +0xB0CB 0x4F0A +0xB0CC 0x4F4D +0xB0CD 0x4F9D +0xB0CE 0x5049 +0xB0CF 0x56F2 +0xB0D0 0x5937 +0xB0D1 0x59D4 +0xB0D2 0x5A01 +0xB0D3 0x5C09 +0xB0D4 0x60DF +0xB0D5 0x610F +0xB0D6 0x6170 +0xB0D7 0x6613 +0xB0D8 0x6905 +0xB0D9 0x70BA +0xB0DA 0x754F +0xB0DB 0x7570 +0xB0DC 0x79FB +0xB0DD 0x7DAD +0xB0DE 0x7DEF +0xB0DF 0x80C3 +0xB0E0 0x840E +0xB0E1 0x8863 +0xB0E2 0x8B02 +0xB0E3 0x9055 +0xB0E4 0x907A +0xB0E5 0x533B +0xB0E6 0x4E95 +0xB0E7 0x4EA5 +0xB0E8 0x57DF +0xB0E9 0x80B2 +0xB0EA 0x90C1 +0xB0EB 0x78EF +0xB0EC 0x4E00 +0xB0ED 0x58F1 +0xB0EE 0x6EA2 +0xB0EF 0x9038 +0xB0F0 0x7A32 +0xB0F1 0x8328 +0xB0F2 0x828B +0xB0F3 0x9C2F +0xB0F4 0x5141 +0xB0F5 0x5370 +0xB0F6 0x54BD +0xB0F7 0x54E1 +0xB0F8 0x56E0 +0xB0F9 0x59FB +0xB0FA 0x5F15 +0xB0FB 0x98F2 +0xB0FC 0x6DEB +0xB0FD 0x80E4 +0xB0FE 0x852D +0xB1A1 0x9662 +0xB1A2 0x9670 +0xB1A3 0x96A0 +0xB1A4 0x97FB +0xB1A5 0x540B +0xB1A6 0x53F3 +0xB1A7 0x5B87 +0xB1A8 0x70CF +0xB1A9 0x7FBD +0xB1AA 0x8FC2 +0xB1AB 0x96E8 +0xB1AC 0x536F +0xB1AD 0x9D5C +0xB1AE 0x7ABA +0xB1AF 0x4E11 +0xB1B0 0x7893 +0xB1B1 0x81FC +0xB1B2 0x6E26 +0xB1B3 0x5618 +0xB1B4 0x5504 +0xB1B5 0x6B1D +0xB1B6 0x851A +0xB1B7 0x9C3B +0xB1B8 0x59E5 +0xB1B9 0x53A9 +0xB1BA 0x6D66 +0xB1BB 0x74DC +0xB1BC 0x958F +0xB1BD 0x5642 +0xB1BE 0x4E91 +0xB1BF 0x904B +0xB1C0 0x96F2 +0xB1C1 0x834F +0xB1C2 0x990C +0xB1C3 0x53E1 +0xB1C4 0x55B6 +0xB1C5 0x5B30 +0xB1C6 0x5F71 +0xB1C7 0x6620 +0xB1C8 0x66F3 +0xB1C9 0x6804 +0xB1CA 0x6C38 +0xB1CB 0x6CF3 +0xB1CC 0x6D29 +0xB1CD 0x745B +0xB1CE 0x76C8 +0xB1CF 0x7A4E +0xB1D0 0x9834 +0xB1D1 0x82F1 +0xB1D2 0x885B +0xB1D3 0x8A60 +0xB1D4 0x92ED +0xB1D5 0x6DB2 +0xB1D6 0x75AB +0xB1D7 0x76CA +0xB1D8 0x99C5 +0xB1D9 0x60A6 +0xB1DA 0x8B01 +0xB1DB 0x8D8A +0xB1DC 0x95B2 +0xB1DD 0x698E +0xB1DE 0x53AD +0xB1DF 0x5186 +0xB1E0 0x5712 +0xB1E1 0x5830 +0xB1E2 0x5944 +0xB1E3 0x5BB4 +0xB1E4 0x5EF6 +0xB1E5 0x6028 +0xB1E6 0x63A9 +0xB1E7 0x63F4 +0xB1E8 0x6CBF +0xB1E9 0x6F14 +0xB1EA 0x708E +0xB1EB 0x7114 +0xB1EC 0x7159 +0xB1ED 0x71D5 +0xB1EE 0x733F +0xB1EF 0x7E01 +0xB1F0 0x8276 +0xB1F1 0x82D1 +0xB1F2 0x8597 +0xB1F3 0x9060 +0xB1F4 0x925B +0xB1F5 0x9D1B +0xB1F6 0x5869 +0xB1F7 0x65BC +0xB1F8 0x6C5A +0xB1F9 0x7525 +0xB1FA 0x51F9 +0xB1FB 0x592E +0xB1FC 0x5965 +0xB1FD 0x5F80 +0xB1FE 0x5FDC +0xB2A1 0x62BC +0xB2A2 0x65FA +0xB2A3 0x6A2A +0xB2A4 0x6B27 +0xB2A5 0x6BB4 +0xB2A6 0x738B +0xB2A7 0x7FC1 +0xB2A8 0x8956 +0xB2A9 0x9D2C +0xB2AA 0x9D0E +0xB2AB 0x9EC4 +0xB2AC 0x5CA1 +0xB2AD 0x6C96 +0xB2AE 0x837B +0xB2AF 0x5104 +0xB2B0 0x5C4B +0xB2B1 0x61B6 +0xB2B2 0x81C6 +0xB2B3 0x6876 +0xB2B4 0x7261 +0xB2B5 0x4E59 +0xB2B6 0x4FFA +0xB2B7 0x5378 +0xB2B8 0x6069 +0xB2B9 0x6E29 +0xB2BA 0x7A4F +0xB2BB 0x97F3 +0xB2BC 0x4E0B +0xB2BD 0x5316 +0xB2BE 0x4EEE +0xB2BF 0x4F55 +0xB2C0 0x4F3D +0xB2C1 0x4FA1 +0xB2C2 0x4F73 +0xB2C3 0x52A0 +0xB2C4 0x53EF +0xB2C5 0x5609 +0xB2C6 0x590F +0xB2C7 0x5AC1 +0xB2C8 0x5BB6 +0xB2C9 0x5BE1 +0xB2CA 0x79D1 +0xB2CB 0x6687 +0xB2CC 0x679C +0xB2CD 0x67B6 +0xB2CE 0x6B4C +0xB2CF 0x6CB3 +0xB2D0 0x706B +0xB2D1 0x73C2 +0xB2D2 0x798D +0xB2D3 0x79BE +0xB2D4 0x7A3C +0xB2D5 0x7B87 +0xB2D6 0x82B1 +0xB2D7 0x82DB +0xB2D8 0x8304 +0xB2D9 0x8377 +0xB2DA 0x83EF +0xB2DB 0x83D3 +0xB2DC 0x8766 +0xB2DD 0x8AB2 +0xB2DE 0x5629 +0xB2DF 0x8CA8 +0xB2E0 0x8FE6 +0xB2E1 0x904E +0xB2E2 0x971E +0xB2E3 0x868A +0xB2E4 0x4FC4 +0xB2E5 0x5CE8 +0xB2E6 0x6211 +0xB2E7 0x7259 +0xB2E8 0x753B +0xB2E9 0x81E5 +0xB2EA 0x82BD +0xB2EB 0x86FE +0xB2EC 0x8CC0 +0xB2ED 0x96C5 +0xB2EE 0x9913 +0xB2EF 0x99D5 +0xB2F0 0x4ECB +0xB2F1 0x4F1A +0xB2F2 0x89E3 +0xB2F3 0x56DE +0xB2F4 0x584A +0xB2F5 0x58CA +0xB2F6 0x5EFB +0xB2F7 0x5FEB +0xB2F8 0x602A +0xB2F9 0x6094 +0xB2FA 0x6062 +0xB2FB 0x61D0 +0xB2FC 0x6212 +0xB2FD 0x62D0 +0xB2FE 0x6539 +0xB3A1 0x9B41 +0xB3A2 0x6666 +0xB3A3 0x68B0 +0xB3A4 0x6D77 +0xB3A5 0x7070 +0xB3A6 0x754C +0xB3A7 0x7686 +0xB3A8 0x7D75 +0xB3A9 0x82A5 +0xB3AA 0x87F9 +0xB3AB 0x958B +0xB3AC 0x968E +0xB3AD 0x8C9D +0xB3AE 0x51F1 +0xB3AF 0x52BE +0xB3B0 0x5916 +0xB3B1 0x54B3 +0xB3B2 0x5BB3 +0xB3B3 0x5D16 +0xB3B4 0x6168 +0xB3B5 0x6982 +0xB3B6 0x6DAF +0xB3B7 0x788D +0xB3B8 0x84CB +0xB3B9 0x8857 +0xB3BA 0x8A72 +0xB3BB 0x93A7 +0xB3BC 0x9AB8 +0xB3BD 0x6D6C +0xB3BE 0x99A8 +0xB3BF 0x86D9 +0xB3C0 0x57A3 +0xB3C1 0x67FF +0xB3C2 0x86CE +0xB3C3 0x920E +0xB3C4 0x5283 +0xB3C5 0x5687 +0xB3C6 0x5404 +0xB3C7 0x5ED3 +0xB3C8 0x62E1 +0xB3C9 0x64B9 +0xB3CA 0x683C +0xB3CB 0x6838 +0xB3CC 0x6BBB +0xB3CD 0x7372 +0xB3CE 0x78BA +0xB3CF 0x7A6B +0xB3D0 0x899A +0xB3D1 0x89D2 +0xB3D2 0x8D6B +0xB3D3 0x8F03 +0xB3D4 0x90ED +0xB3D5 0x95A3 +0xB3D6 0x9694 +0xB3D7 0x9769 +0xB3D8 0x5B66 +0xB3D9 0x5CB3 +0xB3DA 0x697D +0xB3DB 0x984D +0xB3DC 0x984E +0xB3DD 0x639B +0xB3DE 0x7B20 +0xB3DF 0x6A2B +0xB3E0 0x6A7F +0xB3E1 0x68B6 +0xB3E2 0x9C0D +0xB3E3 0x6F5F +0xB3E4 0x5272 +0xB3E5 0x559D +0xB3E6 0x6070 +0xB3E7 0x62EC +0xB3E8 0x6D3B +0xB3E9 0x6E07 +0xB3EA 0x6ED1 +0xB3EB 0x845B +0xB3EC 0x8910 +0xB3ED 0x8F44 +0xB3EE 0x4E14 +0xB3EF 0x9C39 +0xB3F0 0x53F6 +0xB3F1 0x691B +0xB3F2 0x6A3A +0xB3F3 0x9784 +0xB3F4 0x682A +0xB3F5 0x515C +0xB3F6 0x7AC3 +0xB3F7 0x84B2 +0xB3F8 0x91DC +0xB3F9 0x938C +0xB3FA 0x565B +0xB3FB 0x9D28 +0xB3FC 0x6822 +0xB3FD 0x8305 +0xB3FE 0x8431 +0xB4A1 0x7CA5 +0xB4A2 0x5208 +0xB4A3 0x82C5 +0xB4A4 0x74E6 +0xB4A5 0x4E7E +0xB4A6 0x4F83 +0xB4A7 0x51A0 +0xB4A8 0x5BD2 +0xB4A9 0x520A +0xB4AA 0x52D8 +0xB4AB 0x52E7 +0xB4AC 0x5DFB +0xB4AD 0x559A +0xB4AE 0x582A +0xB4AF 0x59E6 +0xB4B0 0x5B8C +0xB4B1 0x5B98 +0xB4B2 0x5BDB +0xB4B3 0x5E72 +0xB4B4 0x5E79 +0xB4B5 0x60A3 +0xB4B6 0x611F +0xB4B7 0x6163 +0xB4B8 0x61BE +0xB4B9 0x63DB +0xB4BA 0x6562 +0xB4BB 0x67D1 +0xB4BC 0x6853 +0xB4BD 0x68FA +0xB4BE 0x6B3E +0xB4BF 0x6B53 +0xB4C0 0x6C57 +0xB4C1 0x6F22 +0xB4C2 0x6F97 +0xB4C3 0x6F45 +0xB4C4 0x74B0 +0xB4C5 0x7518 +0xB4C6 0x76E3 +0xB4C7 0x770B +0xB4C8 0x7AFF +0xB4C9 0x7BA1 +0xB4CA 0x7C21 +0xB4CB 0x7DE9 +0xB4CC 0x7F36 +0xB4CD 0x7FF0 +0xB4CE 0x809D +0xB4CF 0x8266 +0xB4D0 0x839E +0xB4D1 0x89B3 +0xB4D2 0x8ACC +0xB4D3 0x8CAB +0xB4D4 0x9084 +0xB4D5 0x9451 +0xB4D6 0x9593 +0xB4D7 0x9591 +0xB4D8 0x95A2 +0xB4D9 0x9665 +0xB4DA 0x97D3 +0xB4DB 0x9928 +0xB4DC 0x8218 +0xB4DD 0x4E38 +0xB4DE 0x542B +0xB4DF 0x5CB8 +0xB4E0 0x5DCC +0xB4E1 0x73A9 +0xB4E2 0x764C +0xB4E3 0x773C +0xB4E4 0x5CA9 +0xB4E5 0x7FEB +0xB4E6 0x8D0B +0xB4E7 0x96C1 +0xB4E8 0x9811 +0xB4E9 0x9854 +0xB4EA 0x9858 +0xB4EB 0x4F01 +0xB4EC 0x4F0E +0xB4ED 0x5371 +0xB4EE 0x559C +0xB4EF 0x5668 +0xB4F0 0x57FA +0xB4F1 0x5947 +0xB4F2 0x5B09 +0xB4F3 0x5BC4 +0xB4F4 0x5C90 +0xB4F5 0x5E0C +0xB4F6 0x5E7E +0xB4F7 0x5FCC +0xB4F8 0x63EE +0xB4F9 0x673A +0xB4FA 0x65D7 +0xB4FB 0x65E2 +0xB4FC 0x671F +0xB4FD 0x68CB +0xB4FE 0x68C4 +0xB5A1 0x6A5F +0xB5A2 0x5E30 +0xB5A3 0x6BC5 +0xB5A4 0x6C17 +0xB5A5 0x6C7D +0xB5A6 0x757F +0xB5A7 0x7948 +0xB5A8 0x5B63 +0xB5A9 0x7A00 +0xB5AA 0x7D00 +0xB5AB 0x5FBD +0xB5AC 0x898F +0xB5AD 0x8A18 +0xB5AE 0x8CB4 +0xB5AF 0x8D77 +0xB5B0 0x8ECC +0xB5B1 0x8F1D +0xB5B2 0x98E2 +0xB5B3 0x9A0E +0xB5B4 0x9B3C +0xB5B5 0x4E80 +0xB5B6 0x507D +0xB5B7 0x5100 +0xB5B8 0x5993 +0xB5B9 0x5B9C +0xB5BA 0x622F +0xB5BB 0x6280 +0xB5BC 0x64EC +0xB5BD 0x6B3A +0xB5BE 0x72A0 +0xB5BF 0x7591 +0xB5C0 0x7947 +0xB5C1 0x7FA9 +0xB5C2 0x87FB +0xB5C3 0x8ABC +0xB5C4 0x8B70 +0xB5C5 0x63AC +0xB5C6 0x83CA +0xB5C7 0x97A0 +0xB5C8 0x5409 +0xB5C9 0x5403 +0xB5CA 0x55AB +0xB5CB 0x6854 +0xB5CC 0x6A58 +0xB5CD 0x8A70 +0xB5CE 0x7827 +0xB5CF 0x6775 +0xB5D0 0x9ECD +0xB5D1 0x5374 +0xB5D2 0x5BA2 +0xB5D3 0x811A +0xB5D4 0x8650 +0xB5D5 0x9006 +0xB5D6 0x4E18 +0xB5D7 0x4E45 +0xB5D8 0x4EC7 +0xB5D9 0x4F11 +0xB5DA 0x53CA +0xB5DB 0x5438 +0xB5DC 0x5BAE +0xB5DD 0x5F13 +0xB5DE 0x6025 +0xB5DF 0x6551 +0xB5E0 0x673D +0xB5E1 0x6C42 +0xB5E2 0x6C72 +0xB5E3 0x6CE3 +0xB5E4 0x7078 +0xB5E5 0x7403 +0xB5E6 0x7A76 +0xB5E7 0x7AAE +0xB5E8 0x7B08 +0xB5E9 0x7D1A +0xB5EA 0x7CFE +0xB5EB 0x7D66 +0xB5EC 0x65E7 +0xB5ED 0x725B +0xB5EE 0x53BB +0xB5EF 0x5C45 +0xB5F0 0x5DE8 +0xB5F1 0x62D2 +0xB5F2 0x62E0 +0xB5F3 0x6319 +0xB5F4 0x6E20 +0xB5F5 0x865A +0xB5F6 0x8A31 +0xB5F7 0x8DDD +0xB5F8 0x92F8 +0xB5F9 0x6F01 +0xB5FA 0x79A6 +0xB5FB 0x9B5A +0xB5FC 0x4EA8 +0xB5FD 0x4EAB +0xB5FE 0x4EAC +0xB6A1 0x4F9B +0xB6A2 0x4FA0 +0xB6A3 0x50D1 +0xB6A4 0x5147 +0xB6A5 0x7AF6 +0xB6A6 0x5171 +0xB6A7 0x51F6 +0xB6A8 0x5354 +0xB6A9 0x5321 +0xB6AA 0x537F +0xB6AB 0x53EB +0xB6AC 0x55AC +0xB6AD 0x5883 +0xB6AE 0x5CE1 +0xB6AF 0x5F37 +0xB6B0 0x5F4A +0xB6B1 0x602F +0xB6B2 0x6050 +0xB6B3 0x606D +0xB6B4 0x631F +0xB6B5 0x6559 +0xB6B6 0x6A4B +0xB6B7 0x6CC1 +0xB6B8 0x72C2 +0xB6B9 0x72ED +0xB6BA 0x77EF +0xB6BB 0x80F8 +0xB6BC 0x8105 +0xB6BD 0x8208 +0xB6BE 0x854E +0xB6BF 0x90F7 +0xB6C0 0x93E1 +0xB6C1 0x97FF +0xB6C2 0x9957 +0xB6C3 0x9A5A +0xB6C4 0x4EF0 +0xB6C5 0x51DD +0xB6C6 0x5C2D +0xB6C7 0x6681 +0xB6C8 0x696D +0xB6C9 0x5C40 +0xB6CA 0x66F2 +0xB6CB 0x6975 +0xB6CC 0x7389 +0xB6CD 0x6850 +0xB6CE 0x7C81 +0xB6CF 0x50C5 +0xB6D0 0x52E4 +0xB6D1 0x5747 +0xB6D2 0x5DFE +0xB6D3 0x9326 +0xB6D4 0x65A4 +0xB6D5 0x6B23 +0xB6D6 0x6B3D +0xB6D7 0x7434 +0xB6D8 0x7981 +0xB6D9 0x79BD +0xB6DA 0x7B4B +0xB6DB 0x7DCA +0xB6DC 0x82B9 +0xB6DD 0x83CC +0xB6DE 0x887F +0xB6DF 0x895F +0xB6E0 0x8B39 +0xB6E1 0x8FD1 +0xB6E2 0x91D1 +0xB6E3 0x541F +0xB6E4 0x9280 +0xB6E5 0x4E5D +0xB6E6 0x5036 +0xB6E7 0x53E5 +0xB6E8 0x533A +0xB6E9 0x72D7 +0xB6EA 0x7396 +0xB6EB 0x77E9 +0xB6EC 0x82E6 +0xB6ED 0x8EAF +0xB6EE 0x99C6 +0xB6EF 0x99C8 +0xB6F0 0x99D2 +0xB6F1 0x5177 +0xB6F2 0x611A +0xB6F3 0x865E +0xB6F4 0x55B0 +0xB6F5 0x7A7A +0xB6F6 0x5076 +0xB6F7 0x5BD3 +0xB6F8 0x9047 +0xB6F9 0x9685 +0xB6FA 0x4E32 +0xB6FB 0x6ADB +0xB6FC 0x91E7 +0xB6FD 0x5C51 +0xB6FE 0x5C48 +0xB7A1 0x6398 +0xB7A2 0x7A9F +0xB7A3 0x6C93 +0xB7A4 0x9774 +0xB7A5 0x8F61 +0xB7A6 0x7AAA +0xB7A7 0x718A +0xB7A8 0x9688 +0xB7A9 0x7C82 +0xB7AA 0x6817 +0xB7AB 0x7E70 +0xB7AC 0x6851 +0xB7AD 0x936C +0xB7AE 0x52F2 +0xB7AF 0x541B +0xB7B0 0x85AB +0xB7B1 0x8A13 +0xB7B2 0x7FA4 +0xB7B3 0x8ECD +0xB7B4 0x90E1 +0xB7B5 0x5366 +0xB7B6 0x8888 +0xB7B7 0x7941 +0xB7B8 0x4FC2 +0xB7B9 0x50BE +0xB7BA 0x5211 +0xB7BB 0x5144 +0xB7BC 0x5553 +0xB7BD 0x572D +0xB7BE 0x73EA +0xB7BF 0x578B +0xB7C0 0x5951 +0xB7C1 0x5F62 +0xB7C2 0x5F84 +0xB7C3 0x6075 +0xB7C4 0x6176 +0xB7C5 0x6167 +0xB7C6 0x61A9 +0xB7C7 0x63B2 +0xB7C8 0x643A +0xB7C9 0x656C +0xB7CA 0x666F +0xB7CB 0x6842 +0xB7CC 0x6E13 +0xB7CD 0x7566 +0xB7CE 0x7A3D +0xB7CF 0x7CFB +0xB7D0 0x7D4C +0xB7D1 0x7D99 +0xB7D2 0x7E4B +0xB7D3 0x7F6B +0xB7D4 0x830E +0xB7D5 0x834A +0xB7D6 0x86CD +0xB7D7 0x8A08 +0xB7D8 0x8A63 +0xB7D9 0x8B66 +0xB7DA 0x8EFD +0xB7DB 0x981A +0xB7DC 0x9D8F +0xB7DD 0x82B8 +0xB7DE 0x8FCE +0xB7DF 0x9BE8 +0xB7E0 0x5287 +0xB7E1 0x621F +0xB7E2 0x6483 +0xB7E3 0x6FC0 +0xB7E4 0x9699 +0xB7E5 0x6841 +0xB7E6 0x5091 +0xB7E7 0x6B20 +0xB7E8 0x6C7A +0xB7E9 0x6F54 +0xB7EA 0x7A74 +0xB7EB 0x7D50 +0xB7EC 0x8840 +0xB7ED 0x8A23 +0xB7EE 0x6708 +0xB7EF 0x4EF6 +0xB7F0 0x5039 +0xB7F1 0x5026 +0xB7F2 0x5065 +0xB7F3 0x517C +0xB7F4 0x5238 +0xB7F5 0x5263 +0xB7F6 0x55A7 +0xB7F7 0x570F +0xB7F8 0x5805 +0xB7F9 0x5ACC +0xB7FA 0x5EFA +0xB7FB 0x61B2 +0xB7FC 0x61F8 +0xB7FD 0x62F3 +0xB7FE 0x6372 +0xB8A1 0x691C +0xB8A2 0x6A29 +0xB8A3 0x727D +0xB8A4 0x72AC +0xB8A5 0x732E +0xB8A6 0x7814 +0xB8A7 0x786F +0xB8A8 0x7D79 +0xB8A9 0x770C +0xB8AA 0x80A9 +0xB8AB 0x898B +0xB8AC 0x8B19 +0xB8AD 0x8CE2 +0xB8AE 0x8ED2 +0xB8AF 0x9063 +0xB8B0 0x9375 +0xB8B1 0x967A +0xB8B2 0x9855 +0xB8B3 0x9A13 +0xB8B4 0x9E78 +0xB8B5 0x5143 +0xB8B6 0x539F +0xB8B7 0x53B3 +0xB8B8 0x5E7B +0xB8B9 0x5F26 +0xB8BA 0x6E1B +0xB8BB 0x6E90 +0xB8BC 0x7384 +0xB8BD 0x73FE +0xB8BE 0x7D43 +0xB8BF 0x8237 +0xB8C0 0x8A00 +0xB8C1 0x8AFA +0xB8C2 0x9650 +0xB8C3 0x4E4E +0xB8C4 0x500B +0xB8C5 0x53E4 +0xB8C6 0x547C +0xB8C7 0x56FA +0xB8C8 0x59D1 +0xB8C9 0x5B64 +0xB8CA 0x5DF1 +0xB8CB 0x5EAB +0xB8CC 0x5F27 +0xB8CD 0x6238 +0xB8CE 0x6545 +0xB8CF 0x67AF +0xB8D0 0x6E56 +0xB8D1 0x72D0 +0xB8D2 0x7CCA +0xB8D3 0x88B4 +0xB8D4 0x80A1 +0xB8D5 0x80E1 +0xB8D6 0x83F0 +0xB8D7 0x864E +0xB8D8 0x8A87 +0xB8D9 0x8DE8 +0xB8DA 0x9237 +0xB8DB 0x96C7 +0xB8DC 0x9867 +0xB8DD 0x9F13 +0xB8DE 0x4E94 +0xB8DF 0x4E92 +0xB8E0 0x4F0D +0xB8E1 0x5348 +0xB8E2 0x5449 +0xB8E3 0x543E +0xB8E4 0x5A2F +0xB8E5 0x5F8C +0xB8E6 0x5FA1 +0xB8E7 0x609F +0xB8E8 0x68A7 +0xB8E9 0x6A8E +0xB8EA 0x745A +0xB8EB 0x7881 +0xB8EC 0x8A9E +0xB8ED 0x8AA4 +0xB8EE 0x8B77 +0xB8EF 0x9190 +0xB8F0 0x4E5E +0xB8F1 0x9BC9 +0xB8F2 0x4EA4 +0xB8F3 0x4F7C +0xB8F4 0x4FAF +0xB8F5 0x5019 +0xB8F6 0x5016 +0xB8F7 0x5149 +0xB8F8 0x516C +0xB8F9 0x529F +0xB8FA 0x52B9 +0xB8FB 0x52FE +0xB8FC 0x539A +0xB8FD 0x53E3 +0xB8FE 0x5411 +0xB9A1 0x540E +0xB9A2 0x5589 +0xB9A3 0x5751 +0xB9A4 0x57A2 +0xB9A5 0x597D +0xB9A6 0x5B54 +0xB9A7 0x5B5D +0xB9A8 0x5B8F +0xB9A9 0x5DE5 +0xB9AA 0x5DE7 +0xB9AB 0x5DF7 +0xB9AC 0x5E78 +0xB9AD 0x5E83 +0xB9AE 0x5E9A +0xB9AF 0x5EB7 +0xB9B0 0x5F18 +0xB9B1 0x6052 +0xB9B2 0x614C +0xB9B3 0x6297 +0xB9B4 0x62D8 +0xB9B5 0x63A7 +0xB9B6 0x653B +0xB9B7 0x6602 +0xB9B8 0x6643 +0xB9B9 0x66F4 +0xB9BA 0x676D +0xB9BB 0x6821 +0xB9BC 0x6897 +0xB9BD 0x69CB +0xB9BE 0x6C5F +0xB9BF 0x6D2A +0xB9C0 0x6D69 +0xB9C1 0x6E2F +0xB9C2 0x6E9D +0xB9C3 0x7532 +0xB9C4 0x7687 +0xB9C5 0x786C +0xB9C6 0x7A3F +0xB9C7 0x7CE0 +0xB9C8 0x7D05 +0xB9C9 0x7D18 +0xB9CA 0x7D5E +0xB9CB 0x7DB1 +0xB9CC 0x8015 +0xB9CD 0x8003 +0xB9CE 0x80AF +0xB9CF 0x80B1 +0xB9D0 0x8154 +0xB9D1 0x818F +0xB9D2 0x822A +0xB9D3 0x8352 +0xB9D4 0x884C +0xB9D5 0x8861 +0xB9D6 0x8B1B +0xB9D7 0x8CA2 +0xB9D8 0x8CFC +0xB9D9 0x90CA +0xB9DA 0x9175 +0xB9DB 0x9271 +0xB9DC 0x783F +0xB9DD 0x92FC +0xB9DE 0x95A4 +0xB9DF 0x964D +0xB9E0 0x9805 +0xB9E1 0x9999 +0xB9E2 0x9AD8 +0xB9E3 0x9D3B +0xB9E4 0x525B +0xB9E5 0x52AB +0xB9E6 0x53F7 +0xB9E7 0x5408 +0xB9E8 0x58D5 +0xB9E9 0x62F7 +0xB9EA 0x6FE0 +0xB9EB 0x8C6A +0xB9EC 0x8F5F +0xB9ED 0x9EB9 +0xB9EE 0x514B +0xB9EF 0x523B +0xB9F0 0x544A +0xB9F1 0x56FD +0xB9F2 0x7A40 +0xB9F3 0x9177 +0xB9F4 0x9D60 +0xB9F5 0x9ED2 +0xB9F6 0x7344 +0xB9F7 0x6F09 +0xB9F8 0x8170 +0xB9F9 0x7511 +0xB9FA 0x5FFD +0xB9FB 0x60DA +0xB9FC 0x9AA8 +0xB9FD 0x72DB +0xB9FE 0x8FBC +0xBAA1 0x6B64 +0xBAA2 0x9803 +0xBAA3 0x4ECA +0xBAA4 0x56F0 +0xBAA5 0x5764 +0xBAA6 0x58BE +0xBAA7 0x5A5A +0xBAA8 0x6068 +0xBAA9 0x61C7 +0xBAAA 0x660F +0xBAAB 0x6606 +0xBAAC 0x6839 +0xBAAD 0x68B1 +0xBAAE 0x6DF7 +0xBAAF 0x75D5 +0xBAB0 0x7D3A +0xBAB1 0x826E +0xBAB2 0x9B42 +0xBAB3 0x4E9B +0xBAB4 0x4F50 +0xBAB5 0x53C9 +0xBAB6 0x5506 +0xBAB7 0x5D6F +0xBAB8 0x5DE6 +0xBAB9 0x5DEE +0xBABA 0x67FB +0xBABB 0x6C99 +0xBABC 0x7473 +0xBABD 0x7802 +0xBABE 0x8A50 +0xBABF 0x9396 +0xBAC0 0x88DF +0xBAC1 0x5750 +0xBAC2 0x5EA7 +0xBAC3 0x632B +0xBAC4 0x50B5 +0xBAC5 0x50AC +0xBAC6 0x518D +0xBAC7 0x6700 +0xBAC8 0x54C9 +0xBAC9 0x585E +0xBACA 0x59BB +0xBACB 0x5BB0 +0xBACC 0x5F69 +0xBACD 0x624D +0xBACE 0x63A1 +0xBACF 0x683D +0xBAD0 0x6B73 +0xBAD1 0x6E08 +0xBAD2 0x707D +0xBAD3 0x91C7 +0xBAD4 0x7280 +0xBAD5 0x7815 +0xBAD6 0x7826 +0xBAD7 0x796D +0xBAD8 0x658E +0xBAD9 0x7D30 +0xBADA 0x83DC +0xBADB 0x88C1 +0xBADC 0x8F09 +0xBADD 0x969B +0xBADE 0x5264 +0xBADF 0x5728 +0xBAE0 0x6750 +0xBAE1 0x7F6A +0xBAE2 0x8CA1 +0xBAE3 0x51B4 +0xBAE4 0x5742 +0xBAE5 0x962A +0xBAE6 0x583A +0xBAE7 0x698A +0xBAE8 0x80B4 +0xBAE9 0x54B2 +0xBAEA 0x5D0E +0xBAEB 0x57FC +0xBAEC 0x7895 +0xBAED 0x9DFA +0xBAEE 0x4F5C +0xBAEF 0x524A +0xBAF0 0x548B +0xBAF1 0x643E +0xBAF2 0x6628 +0xBAF3 0x6714 +0xBAF4 0x67F5 +0xBAF5 0x7A84 +0xBAF6 0x7B56 +0xBAF7 0x7D22 +0xBAF8 0x932F +0xBAF9 0x685C +0xBAFA 0x9BAD +0xBAFB 0x7B39 +0xBAFC 0x5319 +0xBAFD 0x518A +0xBAFE 0x5237 +0xBBA1 0x5BDF +0xBBA2 0x62F6 +0xBBA3 0x64AE +0xBBA4 0x64E6 +0xBBA5 0x672D +0xBBA6 0x6BBA +0xBBA7 0x85A9 +0xBBA8 0x96D1 +0xBBA9 0x7690 +0xBBAA 0x9BD6 +0xBBAB 0x634C +0xBBAC 0x9306 +0xBBAD 0x9BAB +0xBBAE 0x76BF +0xBBAF 0x6652 +0xBBB0 0x4E09 +0xBBB1 0x5098 +0xBBB2 0x53C2 +0xBBB3 0x5C71 +0xBBB4 0x60E8 +0xBBB5 0x6492 +0xBBB6 0x6563 +0xBBB7 0x685F +0xBBB8 0x71E6 +0xBBB9 0x73CA +0xBBBA 0x7523 +0xBBBB 0x7B97 +0xBBBC 0x7E82 +0xBBBD 0x8695 +0xBBBE 0x8B83 +0xBBBF 0x8CDB +0xBBC0 0x9178 +0xBBC1 0x9910 +0xBBC2 0x65AC +0xBBC3 0x66AB +0xBBC4 0x6B8B +0xBBC5 0x4ED5 +0xBBC6 0x4ED4 +0xBBC7 0x4F3A +0xBBC8 0x4F7F +0xBBC9 0x523A +0xBBCA 0x53F8 +0xBBCB 0x53F2 +0xBBCC 0x55E3 +0xBBCD 0x56DB +0xBBCE 0x58EB +0xBBCF 0x59CB +0xBBD0 0x59C9 +0xBBD1 0x59FF +0xBBD2 0x5B50 +0xBBD3 0x5C4D +0xBBD4 0x5E02 +0xBBD5 0x5E2B +0xBBD6 0x5FD7 +0xBBD7 0x601D +0xBBD8 0x6307 +0xBBD9 0x652F +0xBBDA 0x5B5C +0xBBDB 0x65AF +0xBBDC 0x65BD +0xBBDD 0x65E8 +0xBBDE 0x679D +0xBBDF 0x6B62 +0xBBE0 0x6B7B +0xBBE1 0x6C0F +0xBBE2 0x7345 +0xBBE3 0x7949 +0xBBE4 0x79C1 +0xBBE5 0x7CF8 +0xBBE6 0x7D19 +0xBBE7 0x7D2B +0xBBE8 0x80A2 +0xBBE9 0x8102 +0xBBEA 0x81F3 +0xBBEB 0x8996 +0xBBEC 0x8A5E +0xBBED 0x8A69 +0xBBEE 0x8A66 +0xBBEF 0x8A8C +0xBBF0 0x8AEE +0xBBF1 0x8CC7 +0xBBF2 0x8CDC +0xBBF3 0x96CC +0xBBF4 0x98FC +0xBBF5 0x6B6F +0xBBF6 0x4E8B +0xBBF7 0x4F3C +0xBBF8 0x4F8D +0xBBF9 0x5150 +0xBBFA 0x5B57 +0xBBFB 0x5BFA +0xBBFC 0x6148 +0xBBFD 0x6301 +0xBBFE 0x6642 +0xBCA1 0x6B21 +0xBCA2 0x6ECB +0xBCA3 0x6CBB +0xBCA4 0x723E +0xBCA5 0x74BD +0xBCA6 0x75D4 +0xBCA7 0x78C1 +0xBCA8 0x793A +0xBCA9 0x800C +0xBCAA 0x8033 +0xBCAB 0x81EA +0xBCAC 0x8494 +0xBCAD 0x8F9E +0xBCAE 0x6C50 +0xBCAF 0x9E7F +0xBCB0 0x5F0F +0xBCB1 0x8B58 +0xBCB2 0x9D2B +0xBCB3 0x7AFA +0xBCB4 0x8EF8 +0xBCB5 0x5B8D +0xBCB6 0x96EB +0xBCB7 0x4E03 +0xBCB8 0x53F1 +0xBCB9 0x57F7 +0xBCBA 0x5931 +0xBCBB 0x5AC9 +0xBCBC 0x5BA4 +0xBCBD 0x6089 +0xBCBE 0x6E7F +0xBCBF 0x6F06 +0xBCC0 0x75BE +0xBCC1 0x8CEA +0xBCC2 0x5B9F +0xBCC3 0x8500 +0xBCC4 0x7BE0 +0xBCC5 0x5072 +0xBCC6 0x67F4 +0xBCC7 0x829D +0xBCC8 0x5C61 +0xBCC9 0x854A +0xBCCA 0x7E1E +0xBCCB 0x820E +0xBCCC 0x5199 +0xBCCD 0x5C04 +0xBCCE 0x6368 +0xBCCF 0x8D66 +0xBCD0 0x659C +0xBCD1 0x716E +0xBCD2 0x793E +0xBCD3 0x7D17 +0xBCD4 0x8005 +0xBCD5 0x8B1D +0xBCD6 0x8ECA +0xBCD7 0x906E +0xBCD8 0x86C7 +0xBCD9 0x90AA +0xBCDA 0x501F +0xBCDB 0x52FA +0xBCDC 0x5C3A +0xBCDD 0x6753 +0xBCDE 0x707C +0xBCDF 0x7235 +0xBCE0 0x914C +0xBCE1 0x91C8 +0xBCE2 0x932B +0xBCE3 0x82E5 +0xBCE4 0x5BC2 +0xBCE5 0x5F31 +0xBCE6 0x60F9 +0xBCE7 0x4E3B +0xBCE8 0x53D6 +0xBCE9 0x5B88 +0xBCEA 0x624B +0xBCEB 0x6731 +0xBCEC 0x6B8A +0xBCED 0x72E9 +0xBCEE 0x73E0 +0xBCEF 0x7A2E +0xBCF0 0x816B +0xBCF1 0x8DA3 +0xBCF2 0x9152 +0xBCF3 0x9996 +0xBCF4 0x5112 +0xBCF5 0x53D7 +0xBCF6 0x546A +0xBCF7 0x5BFF +0xBCF8 0x6388 +0xBCF9 0x6A39 +0xBCFA 0x7DAC +0xBCFB 0x9700 +0xBCFC 0x56DA +0xBCFD 0x53CE +0xBCFE 0x5468 +0xBDA1 0x5B97 +0xBDA2 0x5C31 +0xBDA3 0x5DDE +0xBDA4 0x4FEE +0xBDA5 0x6101 +0xBDA6 0x62FE +0xBDA7 0x6D32 +0xBDA8 0x79C0 +0xBDA9 0x79CB +0xBDAA 0x7D42 +0xBDAB 0x7E4D +0xBDAC 0x7FD2 +0xBDAD 0x81ED +0xBDAE 0x821F +0xBDAF 0x8490 +0xBDB0 0x8846 +0xBDB1 0x8972 +0xBDB2 0x8B90 +0xBDB3 0x8E74 +0xBDB4 0x8F2F +0xBDB5 0x9031 +0xBDB6 0x914B +0xBDB7 0x916C +0xBDB8 0x96C6 +0xBDB9 0x919C +0xBDBA 0x4EC0 +0xBDBB 0x4F4F +0xBDBC 0x5145 +0xBDBD 0x5341 +0xBDBE 0x5F93 +0xBDBF 0x620E +0xBDC0 0x67D4 +0xBDC1 0x6C41 +0xBDC2 0x6E0B +0xBDC3 0x7363 +0xBDC4 0x7E26 +0xBDC5 0x91CD +0xBDC6 0x9283 +0xBDC7 0x53D4 +0xBDC8 0x5919 +0xBDC9 0x5BBF +0xBDCA 0x6DD1 +0xBDCB 0x795D +0xBDCC 0x7E2E +0xBDCD 0x7C9B +0xBDCE 0x587E +0xBDCF 0x719F +0xBDD0 0x51FA +0xBDD1 0x8853 +0xBDD2 0x8FF0 +0xBDD3 0x4FCA +0xBDD4 0x5CFB +0xBDD5 0x6625 +0xBDD6 0x77AC +0xBDD7 0x7AE3 +0xBDD8 0x821C +0xBDD9 0x99FF +0xBDDA 0x51C6 +0xBDDB 0x5FAA +0xBDDC 0x65EC +0xBDDD 0x696F +0xBDDE 0x6B89 +0xBDDF 0x6DF3 +0xBDE0 0x6E96 +0xBDE1 0x6F64 +0xBDE2 0x76FE +0xBDE3 0x7D14 +0xBDE4 0x5DE1 +0xBDE5 0x9075 +0xBDE6 0x9187 +0xBDE7 0x9806 +0xBDE8 0x51E6 +0xBDE9 0x521D +0xBDEA 0x6240 +0xBDEB 0x6691 +0xBDEC 0x66D9 +0xBDED 0x6E1A +0xBDEE 0x5EB6 +0xBDEF 0x7DD2 +0xBDF0 0x7F72 +0xBDF1 0x66F8 +0xBDF2 0x85AF +0xBDF3 0x85F7 +0xBDF4 0x8AF8 +0xBDF5 0x52A9 +0xBDF6 0x53D9 +0xBDF7 0x5973 +0xBDF8 0x5E8F +0xBDF9 0x5F90 +0xBDFA 0x6055 +0xBDFB 0x92E4 +0xBDFC 0x9664 +0xBDFD 0x50B7 +0xBDFE 0x511F +0xBEA1 0x52DD +0xBEA2 0x5320 +0xBEA3 0x5347 +0xBEA4 0x53EC +0xBEA5 0x54E8 +0xBEA6 0x5546 +0xBEA7 0x5531 +0xBEA8 0x5617 +0xBEA9 0x5968 +0xBEAA 0x59BE +0xBEAB 0x5A3C +0xBEAC 0x5BB5 +0xBEAD 0x5C06 +0xBEAE 0x5C0F +0xBEAF 0x5C11 +0xBEB0 0x5C1A +0xBEB1 0x5E84 +0xBEB2 0x5E8A +0xBEB3 0x5EE0 +0xBEB4 0x5F70 +0xBEB5 0x627F +0xBEB6 0x6284 +0xBEB7 0x62DB +0xBEB8 0x638C +0xBEB9 0x6377 +0xBEBA 0x6607 +0xBEBB 0x660C +0xBEBC 0x662D +0xBEBD 0x6676 +0xBEBE 0x677E +0xBEBF 0x68A2 +0xBEC0 0x6A1F +0xBEC1 0x6A35 +0xBEC2 0x6CBC +0xBEC3 0x6D88 +0xBEC4 0x6E09 +0xBEC5 0x6E58 +0xBEC6 0x713C +0xBEC7 0x7126 +0xBEC8 0x7167 +0xBEC9 0x75C7 +0xBECA 0x7701 +0xBECB 0x785D +0xBECC 0x7901 +0xBECD 0x7965 +0xBECE 0x79F0 +0xBECF 0x7AE0 +0xBED0 0x7B11 +0xBED1 0x7CA7 +0xBED2 0x7D39 +0xBED3 0x8096 +0xBED4 0x83D6 +0xBED5 0x848B +0xBED6 0x8549 +0xBED7 0x885D +0xBED8 0x88F3 +0xBED9 0x8A1F +0xBEDA 0x8A3C +0xBEDB 0x8A54 +0xBEDC 0x8A73 +0xBEDD 0x8C61 +0xBEDE 0x8CDE +0xBEDF 0x91A4 +0xBEE0 0x9266 +0xBEE1 0x937E +0xBEE2 0x9418 +0xBEE3 0x969C +0xBEE4 0x9798 +0xBEE5 0x4E0A +0xBEE6 0x4E08 +0xBEE7 0x4E1E +0xBEE8 0x4E57 +0xBEE9 0x5197 +0xBEEA 0x5270 +0xBEEB 0x57CE +0xBEEC 0x5834 +0xBEED 0x58CC +0xBEEE 0x5B22 +0xBEEF 0x5E38 +0xBEF0 0x60C5 +0xBEF1 0x64FE +0xBEF2 0x6761 +0xBEF3 0x6756 +0xBEF4 0x6D44 +0xBEF5 0x72B6 +0xBEF6 0x7573 +0xBEF7 0x7A63 +0xBEF8 0x84B8 +0xBEF9 0x8B72 +0xBEFA 0x91B8 +0xBEFB 0x9320 +0xBEFC 0x5631 +0xBEFD 0x57F4 +0xBEFE 0x98FE +0xBFA1 0x62ED +0xBFA2 0x690D +0xBFA3 0x6B96 +0xBFA4 0x71ED +0xBFA5 0x7E54 +0xBFA6 0x8077 +0xBFA7 0x8272 +0xBFA8 0x89E6 +0xBFA9 0x98DF +0xBFAA 0x8755 +0xBFAB 0x8FB1 +0xBFAC 0x5C3B +0xBFAD 0x4F38 +0xBFAE 0x4FE1 +0xBFAF 0x4FB5 +0xBFB0 0x5507 +0xBFB1 0x5A20 +0xBFB2 0x5BDD +0xBFB3 0x5BE9 +0xBFB4 0x5FC3 +0xBFB5 0x614E +0xBFB6 0x632F +0xBFB7 0x65B0 +0xBFB8 0x664B +0xBFB9 0x68EE +0xBFBA 0x699B +0xBFBB 0x6D78 +0xBFBC 0x6DF1 +0xBFBD 0x7533 +0xBFBE 0x75B9 +0xBFBF 0x771F +0xBFC0 0x795E +0xBFC1 0x79E6 +0xBFC2 0x7D33 +0xBFC3 0x81E3 +0xBFC4 0x82AF +0xBFC5 0x85AA +0xBFC6 0x89AA +0xBFC7 0x8A3A +0xBFC8 0x8EAB +0xBFC9 0x8F9B +0xBFCA 0x9032 +0xBFCB 0x91DD +0xBFCC 0x9707 +0xBFCD 0x4EBA +0xBFCE 0x4EC1 +0xBFCF 0x5203 +0xBFD0 0x5875 +0xBFD1 0x58EC +0xBFD2 0x5C0B +0xBFD3 0x751A +0xBFD4 0x5C3D +0xBFD5 0x814E +0xBFD6 0x8A0A +0xBFD7 0x8FC5 +0xBFD8 0x9663 +0xBFD9 0x976D +0xBFDA 0x7B25 +0xBFDB 0x8ACF +0xBFDC 0x9808 +0xBFDD 0x9162 +0xBFDE 0x56F3 +0xBFDF 0x53A8 +0xBFE0 0x9017 +0xBFE1 0x5439 +0xBFE2 0x5782 +0xBFE3 0x5E25 +0xBFE4 0x63A8 +0xBFE5 0x6C34 +0xBFE6 0x708A +0xBFE7 0x7761 +0xBFE8 0x7C8B +0xBFE9 0x7FE0 +0xBFEA 0x8870 +0xBFEB 0x9042 +0xBFEC 0x9154 +0xBFED 0x9310 +0xBFEE 0x9318 +0xBFEF 0x968F +0xBFF0 0x745E +0xBFF1 0x9AC4 +0xBFF2 0x5D07 +0xBFF3 0x5D69 +0xBFF4 0x6570 +0xBFF5 0x67A2 +0xBFF6 0x8DA8 +0xBFF7 0x96DB +0xBFF8 0x636E +0xBFF9 0x6749 +0xBFFA 0x6919 +0xBFFB 0x83C5 +0xBFFC 0x9817 +0xBFFD 0x96C0 +0xBFFE 0x88FE +0xC0A1 0x6F84 +0xC0A2 0x647A +0xC0A3 0x5BF8 +0xC0A4 0x4E16 +0xC0A5 0x702C +0xC0A6 0x755D +0xC0A7 0x662F +0xC0A8 0x51C4 +0xC0A9 0x5236 +0xC0AA 0x52E2 +0xC0AB 0x59D3 +0xC0AC 0x5F81 +0xC0AD 0x6027 +0xC0AE 0x6210 +0xC0AF 0x653F +0xC0B0 0x6574 +0xC0B1 0x661F +0xC0B2 0x6674 +0xC0B3 0x68F2 +0xC0B4 0x6816 +0xC0B5 0x6B63 +0xC0B6 0x6E05 +0xC0B7 0x7272 +0xC0B8 0x751F +0xC0B9 0x76DB +0xC0BA 0x7CBE +0xC0BB 0x8056 +0xC0BC 0x58F0 +0xC0BD 0x88FD +0xC0BE 0x897F +0xC0BF 0x8AA0 +0xC0C0 0x8A93 +0xC0C1 0x8ACB +0xC0C2 0x901D +0xC0C3 0x9192 +0xC0C4 0x9752 +0xC0C5 0x9759 +0xC0C6 0x6589 +0xC0C7 0x7A0E +0xC0C8 0x8106 +0xC0C9 0x96BB +0xC0CA 0x5E2D +0xC0CB 0x60DC +0xC0CC 0x621A +0xC0CD 0x65A5 +0xC0CE 0x6614 +0xC0CF 0x6790 +0xC0D0 0x77F3 +0xC0D1 0x7A4D +0xC0D2 0x7C4D +0xC0D3 0x7E3E +0xC0D4 0x810A +0xC0D5 0x8CAC +0xC0D6 0x8D64 +0xC0D7 0x8DE1 +0xC0D8 0x8E5F +0xC0D9 0x78A9 +0xC0DA 0x5207 +0xC0DB 0x62D9 +0xC0DC 0x63A5 +0xC0DD 0x6442 +0xC0DE 0x6298 +0xC0DF 0x8A2D +0xC0E0 0x7A83 +0xC0E1 0x7BC0 +0xC0E2 0x8AAC +0xC0E3 0x96EA +0xC0E4 0x7D76 +0xC0E5 0x820C +0xC0E6 0x8749 +0xC0E7 0x4ED9 +0xC0E8 0x5148 +0xC0E9 0x5343 +0xC0EA 0x5360 +0xC0EB 0x5BA3 +0xC0EC 0x5C02 +0xC0ED 0x5C16 +0xC0EE 0x5DDD +0xC0EF 0x6226 +0xC0F0 0x6247 +0xC0F1 0x64B0 +0xC0F2 0x6813 +0xC0F3 0x6834 +0xC0F4 0x6CC9 +0xC0F5 0x6D45 +0xC0F6 0x6D17 +0xC0F7 0x67D3 +0xC0F8 0x6F5C +0xC0F9 0x714E +0xC0FA 0x717D +0xC0FB 0x65CB +0xC0FC 0x7A7F +0xC0FD 0x7BAD +0xC0FE 0x7DDA +0xC1A1 0x7E4A +0xC1A2 0x7FA8 +0xC1A3 0x817A +0xC1A4 0x821B +0xC1A5 0x8239 +0xC1A6 0x85A6 +0xC1A7 0x8A6E +0xC1A8 0x8CCE +0xC1A9 0x8DF5 +0xC1AA 0x9078 +0xC1AB 0x9077 +0xC1AC 0x92AD +0xC1AD 0x9291 +0xC1AE 0x9583 +0xC1AF 0x9BAE +0xC1B0 0x524D +0xC1B1 0x5584 +0xC1B2 0x6F38 +0xC1B3 0x7136 +0xC1B4 0x5168 +0xC1B5 0x7985 +0xC1B6 0x7E55 +0xC1B7 0x81B3 +0xC1B8 0x7CCE +0xC1B9 0x564C +0xC1BA 0x5851 +0xC1BB 0x5CA8 +0xC1BC 0x63AA +0xC1BD 0x66FE +0xC1BE 0x66FD +0xC1BF 0x695A +0xC1C0 0x72D9 +0xC1C1 0x758F +0xC1C2 0x758E +0xC1C3 0x790E +0xC1C4 0x7956 +0xC1C5 0x79DF +0xC1C6 0x7C97 +0xC1C7 0x7D20 +0xC1C8 0x7D44 +0xC1C9 0x8607 +0xC1CA 0x8A34 +0xC1CB 0x963B +0xC1CC 0x9061 +0xC1CD 0x9F20 +0xC1CE 0x50E7 +0xC1CF 0x5275 +0xC1D0 0x53CC +0xC1D1 0x53E2 +0xC1D2 0x5009 +0xC1D3 0x55AA +0xC1D4 0x58EE +0xC1D5 0x594F +0xC1D6 0x723D +0xC1D7 0x5B8B +0xC1D8 0x5C64 +0xC1D9 0x531D +0xC1DA 0x60E3 +0xC1DB 0x60F3 +0xC1DC 0x635C +0xC1DD 0x6383 +0xC1DE 0x633F +0xC1DF 0x63BB +0xC1E0 0x64CD +0xC1E1 0x65E9 +0xC1E2 0x66F9 +0xC1E3 0x5DE3 +0xC1E4 0x69CD +0xC1E5 0x69FD +0xC1E6 0x6F15 +0xC1E7 0x71E5 +0xC1E8 0x4E89 +0xC1E9 0x75E9 +0xC1EA 0x76F8 +0xC1EB 0x7A93 +0xC1EC 0x7CDF +0xC1ED 0x7DCF +0xC1EE 0x7D9C +0xC1EF 0x8061 +0xC1F0 0x8349 +0xC1F1 0x8358 +0xC1F2 0x846C +0xC1F3 0x84BC +0xC1F4 0x85FB +0xC1F5 0x88C5 +0xC1F6 0x8D70 +0xC1F7 0x9001 +0xC1F8 0x906D +0xC1F9 0x9397 +0xC1FA 0x971C +0xC1FB 0x9A12 +0xC1FC 0x50CF +0xC1FD 0x5897 +0xC1FE 0x618E +0xC2A1 0x81D3 +0xC2A2 0x8535 +0xC2A3 0x8D08 +0xC2A4 0x9020 +0xC2A5 0x4FC3 +0xC2A6 0x5074 +0xC2A7 0x5247 +0xC2A8 0x5373 +0xC2A9 0x606F +0xC2AA 0x6349 +0xC2AB 0x675F +0xC2AC 0x6E2C +0xC2AD 0x8DB3 +0xC2AE 0x901F +0xC2AF 0x4FD7 +0xC2B0 0x5C5E +0xC2B1 0x8CCA +0xC2B2 0x65CF +0xC2B3 0x7D9A +0xC2B4 0x5352 +0xC2B5 0x8896 +0xC2B6 0x5176 +0xC2B7 0x63C3 +0xC2B8 0x5B58 +0xC2B9 0x5B6B +0xC2BA 0x5C0A +0xC2BB 0x640D +0xC2BC 0x6751 +0xC2BD 0x905C +0xC2BE 0x4ED6 +0xC2BF 0x591A +0xC2C0 0x592A +0xC2C1 0x6C70 +0xC2C2 0x8A51 +0xC2C3 0x553E +0xC2C4 0x5815 +0xC2C5 0x59A5 +0xC2C6 0x60F0 +0xC2C7 0x6253 +0xC2C8 0x67C1 +0xC2C9 0x8235 +0xC2CA 0x6955 +0xC2CB 0x9640 +0xC2CC 0x99C4 +0xC2CD 0x9A28 +0xC2CE 0x4F53 +0xC2CF 0x5806 +0xC2D0 0x5BFE +0xC2D1 0x8010 +0xC2D2 0x5CB1 +0xC2D3 0x5E2F +0xC2D4 0x5F85 +0xC2D5 0x6020 +0xC2D6 0x614B +0xC2D7 0x6234 +0xC2D8 0x66FF +0xC2D9 0x6CF0 +0xC2DA 0x6EDE +0xC2DB 0x80CE +0xC2DC 0x817F +0xC2DD 0x82D4 +0xC2DE 0x888B +0xC2DF 0x8CB8 +0xC2E0 0x9000 +0xC2E1 0x902E +0xC2E2 0x968A +0xC2E3 0x9EDB +0xC2E4 0x9BDB +0xC2E5 0x4EE3 +0xC2E6 0x53F0 +0xC2E7 0x5927 +0xC2E8 0x7B2C +0xC2E9 0x918D +0xC2EA 0x984C +0xC2EB 0x9DF9 +0xC2EC 0x6EDD +0xC2ED 0x7027 +0xC2EE 0x5353 +0xC2EF 0x5544 +0xC2F0 0x5B85 +0xC2F1 0x6258 +0xC2F2 0x629E +0xC2F3 0x62D3 +0xC2F4 0x6CA2 +0xC2F5 0x6FEF +0xC2F6 0x7422 +0xC2F7 0x8A17 +0xC2F8 0x9438 +0xC2F9 0x6FC1 +0xC2FA 0x8AFE +0xC2FB 0x8338 +0xC2FC 0x51E7 +0xC2FD 0x86F8 +0xC2FE 0x53EA +0xC3A1 0x53E9 +0xC3A2 0x4F46 +0xC3A3 0x9054 +0xC3A4 0x8FB0 +0xC3A5 0x596A +0xC3A6 0x8131 +0xC3A7 0x5DFD +0xC3A8 0x7AEA +0xC3A9 0x8FBF +0xC3AA 0x68DA +0xC3AB 0x8C37 +0xC3AC 0x72F8 +0xC3AD 0x9C48 +0xC3AE 0x6A3D +0xC3AF 0x8AB0 +0xC3B0 0x4E39 +0xC3B1 0x5358 +0xC3B2 0x5606 +0xC3B3 0x5766 +0xC3B4 0x62C5 +0xC3B5 0x63A2 +0xC3B6 0x65E6 +0xC3B7 0x6B4E +0xC3B8 0x6DE1 +0xC3B9 0x6E5B +0xC3BA 0x70AD +0xC3BB 0x77ED +0xC3BC 0x7AEF +0xC3BD 0x7BAA +0xC3BE 0x7DBB +0xC3BF 0x803D +0xC3C0 0x80C6 +0xC3C1 0x86CB +0xC3C2 0x8A95 +0xC3C3 0x935B +0xC3C4 0x56E3 +0xC3C5 0x58C7 +0xC3C6 0x5F3E +0xC3C7 0x65AD +0xC3C8 0x6696 +0xC3C9 0x6A80 +0xC3CA 0x6BB5 +0xC3CB 0x7537 +0xC3CC 0x8AC7 +0xC3CD 0x5024 +0xC3CE 0x77E5 +0xC3CF 0x5730 +0xC3D0 0x5F1B +0xC3D1 0x6065 +0xC3D2 0x667A +0xC3D3 0x6C60 +0xC3D4 0x75F4 +0xC3D5 0x7A1A +0xC3D6 0x7F6E +0xC3D7 0x81F4 +0xC3D8 0x8718 +0xC3D9 0x9045 +0xC3DA 0x99B3 +0xC3DB 0x7BC9 +0xC3DC 0x755C +0xC3DD 0x7AF9 +0xC3DE 0x7B51 +0xC3DF 0x84C4 +0xC3E0 0x9010 +0xC3E1 0x79E9 +0xC3E2 0x7A92 +0xC3E3 0x8336 +0xC3E4 0x5AE1 +0xC3E5 0x7740 +0xC3E6 0x4E2D +0xC3E7 0x4EF2 +0xC3E8 0x5B99 +0xC3E9 0x5FE0 +0xC3EA 0x62BD +0xC3EB 0x663C +0xC3EC 0x67F1 +0xC3ED 0x6CE8 +0xC3EE 0x866B +0xC3EF 0x8877 +0xC3F0 0x8A3B +0xC3F1 0x914E +0xC3F2 0x92F3 +0xC3F3 0x99D0 +0xC3F4 0x6A17 +0xC3F5 0x7026 +0xC3F6 0x732A +0xC3F7 0x82E7 +0xC3F8 0x8457 +0xC3F9 0x8CAF +0xC3FA 0x4E01 +0xC3FB 0x5146 +0xC3FC 0x51CB +0xC3FD 0x558B +0xC3FE 0x5BF5 +0xC4A1 0x5E16 +0xC4A2 0x5E33 +0xC4A3 0x5E81 +0xC4A4 0x5F14 +0xC4A5 0x5F35 +0xC4A6 0x5F6B +0xC4A7 0x5FB4 +0xC4A8 0x61F2 +0xC4A9 0x6311 +0xC4AA 0x66A2 +0xC4AB 0x671D +0xC4AC 0x6F6E +0xC4AD 0x7252 +0xC4AE 0x753A +0xC4AF 0x773A +0xC4B0 0x8074 +0xC4B1 0x8139 +0xC4B2 0x8178 +0xC4B3 0x8776 +0xC4B4 0x8ABF +0xC4B5 0x8ADC +0xC4B6 0x8D85 +0xC4B7 0x8DF3 +0xC4B8 0x929A +0xC4B9 0x9577 +0xC4BA 0x9802 +0xC4BB 0x9CE5 +0xC4BC 0x52C5 +0xC4BD 0x6357 +0xC4BE 0x76F4 +0xC4BF 0x6715 +0xC4C0 0x6C88 +0xC4C1 0x73CD +0xC4C2 0x8CC3 +0xC4C3 0x93AE +0xC4C4 0x9673 +0xC4C5 0x6D25 +0xC4C6 0x589C +0xC4C7 0x690E +0xC4C8 0x69CC +0xC4C9 0x8FFD +0xC4CA 0x939A +0xC4CB 0x75DB +0xC4CC 0x901A +0xC4CD 0x585A +0xC4CE 0x6802 +0xC4CF 0x63B4 +0xC4D0 0x69FB +0xC4D1 0x4F43 +0xC4D2 0x6F2C +0xC4D3 0x67D8 +0xC4D4 0x8FBB +0xC4D5 0x8526 +0xC4D6 0x7DB4 +0xC4D7 0x9354 +0xC4D8 0x693F +0xC4D9 0x6F70 +0xC4DA 0x576A +0xC4DB 0x58F7 +0xC4DC 0x5B2C +0xC4DD 0x7D2C +0xC4DE 0x722A +0xC4DF 0x540A +0xC4E0 0x91E3 +0xC4E1 0x9DB4 +0xC4E2 0x4EAD +0xC4E3 0x4F4E +0xC4E4 0x505C +0xC4E5 0x5075 +0xC4E6 0x5243 +0xC4E7 0x8C9E +0xC4E8 0x5448 +0xC4E9 0x5824 +0xC4EA 0x5B9A +0xC4EB 0x5E1D +0xC4EC 0x5E95 +0xC4ED 0x5EAD +0xC4EE 0x5EF7 +0xC4EF 0x5F1F +0xC4F0 0x608C +0xC4F1 0x62B5 +0xC4F2 0x633A +0xC4F3 0x63D0 +0xC4F4 0x68AF +0xC4F5 0x6C40 +0xC4F6 0x7887 +0xC4F7 0x798E +0xC4F8 0x7A0B +0xC4F9 0x7DE0 +0xC4FA 0x8247 +0xC4FB 0x8A02 +0xC4FC 0x8AE6 +0xC4FD 0x8E44 +0xC4FE 0x9013 +0xC5A1 0x90B8 +0xC5A2 0x912D +0xC5A3 0x91D8 +0xC5A4 0x9F0E +0xC5A5 0x6CE5 +0xC5A6 0x6458 +0xC5A7 0x64E2 +0xC5A8 0x6575 +0xC5A9 0x6EF4 +0xC5AA 0x7684 +0xC5AB 0x7B1B +0xC5AC 0x9069 +0xC5AD 0x93D1 +0xC5AE 0x6EBA +0xC5AF 0x54F2 +0xC5B0 0x5FB9 +0xC5B1 0x64A4 +0xC5B2 0x8F4D +0xC5B3 0x8FED +0xC5B4 0x9244 +0xC5B5 0x5178 +0xC5B6 0x586B +0xC5B7 0x5929 +0xC5B8 0x5C55 +0xC5B9 0x5E97 +0xC5BA 0x6DFB +0xC5BB 0x7E8F +0xC5BC 0x751C +0xC5BD 0x8CBC +0xC5BE 0x8EE2 +0xC5BF 0x985B +0xC5C0 0x70B9 +0xC5C1 0x4F1D +0xC5C2 0x6BBF +0xC5C3 0x6FB1 +0xC5C4 0x7530 +0xC5C5 0x96FB +0xC5C6 0x514E +0xC5C7 0x5410 +0xC5C8 0x5835 +0xC5C9 0x5857 +0xC5CA 0x59AC +0xC5CB 0x5C60 +0xC5CC 0x5F92 +0xC5CD 0x6597 +0xC5CE 0x675C +0xC5CF 0x6E21 +0xC5D0 0x767B +0xC5D1 0x83DF +0xC5D2 0x8CED +0xC5D3 0x9014 +0xC5D4 0x90FD +0xC5D5 0x934D +0xC5D6 0x7825 +0xC5D7 0x783A +0xC5D8 0x52AA +0xC5D9 0x5EA6 +0xC5DA 0x571F +0xC5DB 0x5974 +0xC5DC 0x6012 +0xC5DD 0x5012 +0xC5DE 0x515A +0xC5DF 0x51AC +0xC5E0 0x51CD +0xC5E1 0x5200 +0xC5E2 0x5510 +0xC5E3 0x5854 +0xC5E4 0x5858 +0xC5E5 0x5957 +0xC5E6 0x5B95 +0xC5E7 0x5CF6 +0xC5E8 0x5D8B +0xC5E9 0x60BC +0xC5EA 0x6295 +0xC5EB 0x642D +0xC5EC 0x6771 +0xC5ED 0x6843 +0xC5EE 0x68BC +0xC5EF 0x68DF +0xC5F0 0x76D7 +0xC5F1 0x6DD8 +0xC5F2 0x6E6F +0xC5F3 0x6D9B +0xC5F4 0x706F +0xC5F5 0x71C8 +0xC5F6 0x5F53 +0xC5F7 0x75D8 +0xC5F8 0x7977 +0xC5F9 0x7B49 +0xC5FA 0x7B54 +0xC5FB 0x7B52 +0xC5FC 0x7CD6 +0xC5FD 0x7D71 +0xC5FE 0x5230 +0xC6A1 0x8463 +0xC6A2 0x8569 +0xC6A3 0x85E4 +0xC6A4 0x8A0E +0xC6A5 0x8B04 +0xC6A6 0x8C46 +0xC6A7 0x8E0F +0xC6A8 0x9003 +0xC6A9 0x900F +0xC6AA 0x9419 +0xC6AB 0x9676 +0xC6AC 0x982D +0xC6AD 0x9A30 +0xC6AE 0x95D8 +0xC6AF 0x50CD +0xC6B0 0x52D5 +0xC6B1 0x540C +0xC6B2 0x5802 +0xC6B3 0x5C0E +0xC6B4 0x61A7 +0xC6B5 0x649E +0xC6B6 0x6D1E +0xC6B7 0x77B3 +0xC6B8 0x7AE5 +0xC6B9 0x80F4 +0xC6BA 0x8404 +0xC6BB 0x9053 +0xC6BC 0x9285 +0xC6BD 0x5CE0 +0xC6BE 0x9D07 +0xC6BF 0x533F +0xC6C0 0x5F97 +0xC6C1 0x5FB3 +0xC6C2 0x6D9C +0xC6C3 0x7279 +0xC6C4 0x7763 +0xC6C5 0x79BF +0xC6C6 0x7BE4 +0xC6C7 0x6BD2 +0xC6C8 0x72EC +0xC6C9 0x8AAD +0xC6CA 0x6803 +0xC6CB 0x6A61 +0xC6CC 0x51F8 +0xC6CD 0x7A81 +0xC6CE 0x6934 +0xC6CF 0x5C4A +0xC6D0 0x9CF6 +0xC6D1 0x82EB +0xC6D2 0x5BC5 +0xC6D3 0x9149 +0xC6D4 0x701E +0xC6D5 0x5678 +0xC6D6 0x5C6F +0xC6D7 0x60C7 +0xC6D8 0x6566 +0xC6D9 0x6C8C +0xC6DA 0x8C5A +0xC6DB 0x9041 +0xC6DC 0x9813 +0xC6DD 0x5451 +0xC6DE 0x66C7 +0xC6DF 0x920D +0xC6E0 0x5948 +0xC6E1 0x90A3 +0xC6E2 0x5185 +0xC6E3 0x4E4D +0xC6E4 0x51EA +0xC6E5 0x8599 +0xC6E6 0x8B0E +0xC6E7 0x7058 +0xC6E8 0x637A +0xC6E9 0x934B +0xC6EA 0x6962 +0xC6EB 0x99B4 +0xC6EC 0x7E04 +0xC6ED 0x7577 +0xC6EE 0x5357 +0xC6EF 0x6960 +0xC6F0 0x8EDF +0xC6F1 0x96E3 +0xC6F2 0x6C5D +0xC6F3 0x4E8C +0xC6F4 0x5C3C +0xC6F5 0x5F10 +0xC6F6 0x8FE9 +0xC6F7 0x5302 +0xC6F8 0x8CD1 +0xC6F9 0x8089 +0xC6FA 0x8679 +0xC6FB 0x5EFF +0xC6FC 0x65E5 +0xC6FD 0x4E73 +0xC6FE 0x5165 +0xC7A1 0x5982 +0xC7A2 0x5C3F +0xC7A3 0x97EE +0xC7A4 0x4EFB +0xC7A5 0x598A +0xC7A6 0x5FCD +0xC7A7 0x8A8D +0xC7A8 0x6FE1 +0xC7A9 0x79B0 +0xC7AA 0x7962 +0xC7AB 0x5BE7 +0xC7AC 0x8471 +0xC7AD 0x732B +0xC7AE 0x71B1 +0xC7AF 0x5E74 +0xC7B0 0x5FF5 +0xC7B1 0x637B +0xC7B2 0x649A +0xC7B3 0x71C3 +0xC7B4 0x7C98 +0xC7B5 0x4E43 +0xC7B6 0x5EFC +0xC7B7 0x4E4B +0xC7B8 0x57DC +0xC7B9 0x56A2 +0xC7BA 0x60A9 +0xC7BB 0x6FC3 +0xC7BC 0x7D0D +0xC7BD 0x80FD +0xC7BE 0x8133 +0xC7BF 0x81BF +0xC7C0 0x8FB2 +0xC7C1 0x8997 +0xC7C2 0x86A4 +0xC7C3 0x5DF4 +0xC7C4 0x628A +0xC7C5 0x64AD +0xC7C6 0x8987 +0xC7C7 0x6777 +0xC7C8 0x6CE2 +0xC7C9 0x6D3E +0xC7CA 0x7436 +0xC7CB 0x7834 +0xC7CC 0x5A46 +0xC7CD 0x7F75 +0xC7CE 0x82AD +0xC7CF 0x99AC +0xC7D0 0x4FF3 +0xC7D1 0x5EC3 +0xC7D2 0x62DD +0xC7D3 0x6392 +0xC7D4 0x6557 +0xC7D5 0x676F +0xC7D6 0x76C3 +0xC7D7 0x724C +0xC7D8 0x80CC +0xC7D9 0x80BA +0xC7DA 0x8F29 +0xC7DB 0x914D +0xC7DC 0x500D +0xC7DD 0x57F9 +0xC7DE 0x5A92 +0xC7DF 0x6885 +0xC7E0 0x6973 +0xC7E1 0x7164 +0xC7E2 0x72FD +0xC7E3 0x8CB7 +0xC7E4 0x58F2 +0xC7E5 0x8CE0 +0xC7E6 0x966A +0xC7E7 0x9019 +0xC7E8 0x877F +0xC7E9 0x79E4 +0xC7EA 0x77E7 +0xC7EB 0x8429 +0xC7EC 0x4F2F +0xC7ED 0x5265 +0xC7EE 0x535A +0xC7EF 0x62CD +0xC7F0 0x67CF +0xC7F1 0x6CCA +0xC7F2 0x767D +0xC7F3 0x7B94 +0xC7F4 0x7C95 +0xC7F5 0x8236 +0xC7F6 0x8584 +0xC7F7 0x8FEB +0xC7F8 0x66DD +0xC7F9 0x6F20 +0xC7FA 0x7206 +0xC7FB 0x7E1B +0xC7FC 0x83AB +0xC7FD 0x99C1 +0xC7FE 0x9EA6 +0xC8A1 0x51FD +0xC8A2 0x7BB1 +0xC8A3 0x7872 +0xC8A4 0x7BB8 +0xC8A5 0x8087 +0xC8A6 0x7B48 +0xC8A7 0x6AE8 +0xC8A8 0x5E61 +0xC8A9 0x808C +0xC8AA 0x7551 +0xC8AB 0x7560 +0xC8AC 0x516B +0xC8AD 0x9262 +0xC8AE 0x6E8C +0xC8AF 0x767A +0xC8B0 0x9197 +0xC8B1 0x9AEA +0xC8B2 0x4F10 +0xC8B3 0x7F70 +0xC8B4 0x629C +0xC8B5 0x7B4F +0xC8B6 0x95A5 +0xC8B7 0x9CE9 +0xC8B8 0x567A +0xC8B9 0x5859 +0xC8BA 0x86E4 +0xC8BB 0x96BC +0xC8BC 0x4F34 +0xC8BD 0x5224 +0xC8BE 0x534A +0xC8BF 0x53CD +0xC8C0 0x53DB +0xC8C1 0x5E06 +0xC8C2 0x642C +0xC8C3 0x6591 +0xC8C4 0x677F +0xC8C5 0x6C3E +0xC8C6 0x6C4E +0xC8C7 0x7248 +0xC8C8 0x72AF +0xC8C9 0x73ED +0xC8CA 0x7554 +0xC8CB 0x7E41 +0xC8CC 0x822C +0xC8CD 0x85E9 +0xC8CE 0x8CA9 +0xC8CF 0x7BC4 +0xC8D0 0x91C6 +0xC8D1 0x7169 +0xC8D2 0x9812 +0xC8D3 0x98EF +0xC8D4 0x633D +0xC8D5 0x6669 +0xC8D6 0x756A +0xC8D7 0x76E4 +0xC8D8 0x78D0 +0xC8D9 0x8543 +0xC8DA 0x86EE +0xC8DB 0x532A +0xC8DC 0x5351 +0xC8DD 0x5426 +0xC8DE 0x5983 +0xC8DF 0x5E87 +0xC8E0 0x5F7C +0xC8E1 0x60B2 +0xC8E2 0x6249 +0xC8E3 0x6279 +0xC8E4 0x62AB +0xC8E5 0x6590 +0xC8E6 0x6BD4 +0xC8E7 0x6CCC +0xC8E8 0x75B2 +0xC8E9 0x76AE +0xC8EA 0x7891 +0xC8EB 0x79D8 +0xC8EC 0x7DCB +0xC8ED 0x7F77 +0xC8EE 0x80A5 +0xC8EF 0x88AB +0xC8F0 0x8AB9 +0xC8F1 0x8CBB +0xC8F2 0x907F +0xC8F3 0x975E +0xC8F4 0x98DB +0xC8F5 0x6A0B +0xC8F6 0x7C38 +0xC8F7 0x5099 +0xC8F8 0x5C3E +0xC8F9 0x5FAE +0xC8FA 0x6787 +0xC8FB 0x6BD8 +0xC8FC 0x7435 +0xC8FD 0x7709 +0xC8FE 0x7F8E +0xC9A1 0x9F3B +0xC9A2 0x67CA +0xC9A3 0x7A17 +0xC9A4 0x5339 +0xC9A5 0x758B +0xC9A6 0x9AED +0xC9A7 0x5F66 +0xC9A8 0x819D +0xC9A9 0x83F1 +0xC9AA 0x8098 +0xC9AB 0x5F3C +0xC9AC 0x5FC5 +0xC9AD 0x7562 +0xC9AE 0x7B46 +0xC9AF 0x903C +0xC9B0 0x6867 +0xC9B1 0x59EB +0xC9B2 0x5A9B +0xC9B3 0x7D10 +0xC9B4 0x767E +0xC9B5 0x8B2C +0xC9B6 0x4FF5 +0xC9B7 0x5F6A +0xC9B8 0x6A19 +0xC9B9 0x6C37 +0xC9BA 0x6F02 +0xC9BB 0x74E2 +0xC9BC 0x7968 +0xC9BD 0x8868 +0xC9BE 0x8A55 +0xC9BF 0x8C79 +0xC9C0 0x5EDF +0xC9C1 0x63CF +0xC9C2 0x75C5 +0xC9C3 0x79D2 +0xC9C4 0x82D7 +0xC9C5 0x9328 +0xC9C6 0x92F2 +0xC9C7 0x849C +0xC9C8 0x86ED +0xC9C9 0x9C2D +0xC9CA 0x54C1 +0xC9CB 0x5F6C +0xC9CC 0x658C +0xC9CD 0x6D5C +0xC9CE 0x7015 +0xC9CF 0x8CA7 +0xC9D0 0x8CD3 +0xC9D1 0x983B +0xC9D2 0x654F +0xC9D3 0x74F6 +0xC9D4 0x4E0D +0xC9D5 0x4ED8 +0xC9D6 0x57E0 +0xC9D7 0x592B +0xC9D8 0x5A66 +0xC9D9 0x5BCC +0xC9DA 0x51A8 +0xC9DB 0x5E03 +0xC9DC 0x5E9C +0xC9DD 0x6016 +0xC9DE 0x6276 +0xC9DF 0x6577 +0xC9E0 0x65A7 +0xC9E1 0x666E +0xC9E2 0x6D6E +0xC9E3 0x7236 +0xC9E4 0x7B26 +0xC9E5 0x8150 +0xC9E6 0x819A +0xC9E7 0x8299 +0xC9E8 0x8B5C +0xC9E9 0x8CA0 +0xC9EA 0x8CE6 +0xC9EB 0x8D74 +0xC9EC 0x961C +0xC9ED 0x9644 +0xC9EE 0x4FAE +0xC9EF 0x64AB +0xC9F0 0x6B66 +0xC9F1 0x821E +0xC9F2 0x8461 +0xC9F3 0x856A +0xC9F4 0x90E8 +0xC9F5 0x5C01 +0xC9F6 0x6953 +0xC9F7 0x98A8 +0xC9F8 0x847A +0xC9F9 0x8557 +0xC9FA 0x4F0F +0xC9FB 0x526F +0xC9FC 0x5FA9 +0xC9FD 0x5E45 +0xC9FE 0x670D +0xCAA1 0x798F +0xCAA2 0x8179 +0xCAA3 0x8907 +0xCAA4 0x8986 +0xCAA5 0x6DF5 +0xCAA6 0x5F17 +0xCAA7 0x6255 +0xCAA8 0x6CB8 +0xCAA9 0x4ECF +0xCAAA 0x7269 +0xCAAB 0x9B92 +0xCAAC 0x5206 +0xCAAD 0x543B +0xCAAE 0x5674 +0xCAAF 0x58B3 +0xCAB0 0x61A4 +0xCAB1 0x626E +0xCAB2 0x711A +0xCAB3 0x596E +0xCAB4 0x7C89 +0xCAB5 0x7CDE +0xCAB6 0x7D1B +0xCAB7 0x96F0 +0xCAB8 0x6587 +0xCAB9 0x805E +0xCABA 0x4E19 +0xCABB 0x4F75 +0xCABC 0x5175 +0xCABD 0x5840 +0xCABE 0x5E63 +0xCABF 0x5E73 +0xCAC0 0x5F0A +0xCAC1 0x67C4 +0xCAC2 0x4E26 +0xCAC3 0x853D +0xCAC4 0x9589 +0xCAC5 0x965B +0xCAC6 0x7C73 +0xCAC7 0x9801 +0xCAC8 0x50FB +0xCAC9 0x58C1 +0xCACA 0x7656 +0xCACB 0x78A7 +0xCACC 0x5225 +0xCACD 0x77A5 +0xCACE 0x8511 +0xCACF 0x7B86 +0xCAD0 0x504F +0xCAD1 0x5909 +0xCAD2 0x7247 +0xCAD3 0x7BC7 +0xCAD4 0x7DE8 +0xCAD5 0x8FBA +0xCAD6 0x8FD4 +0xCAD7 0x904D +0xCAD8 0x4FBF +0xCAD9 0x52C9 +0xCADA 0x5A29 +0xCADB 0x5F01 +0xCADC 0x97AD +0xCADD 0x4FDD +0xCADE 0x8217 +0xCADF 0x92EA +0xCAE0 0x5703 +0xCAE1 0x6355 +0xCAE2 0x6B69 +0xCAE3 0x752B +0xCAE4 0x88DC +0xCAE5 0x8F14 +0xCAE6 0x7A42 +0xCAE7 0x52DF +0xCAE8 0x5893 +0xCAE9 0x6155 +0xCAEA 0x620A +0xCAEB 0x66AE +0xCAEC 0x6BCD +0xCAED 0x7C3F +0xCAEE 0x83E9 +0xCAEF 0x5023 +0xCAF0 0x4FF8 +0xCAF1 0x5305 +0xCAF2 0x5446 +0xCAF3 0x5831 +0xCAF4 0x5949 +0xCAF5 0x5B9D +0xCAF6 0x5CF0 +0xCAF7 0x5CEF +0xCAF8 0x5D29 +0xCAF9 0x5E96 +0xCAFA 0x62B1 +0xCAFB 0x6367 +0xCAFC 0x653E +0xCAFD 0x65B9 +0xCAFE 0x670B +0xCBA1 0x6CD5 +0xCBA2 0x6CE1 +0xCBA3 0x70F9 +0xCBA4 0x7832 +0xCBA5 0x7E2B +0xCBA6 0x80DE +0xCBA7 0x82B3 +0xCBA8 0x840C +0xCBA9 0x84EC +0xCBAA 0x8702 +0xCBAB 0x8912 +0xCBAC 0x8A2A +0xCBAD 0x8C4A +0xCBAE 0x90A6 +0xCBAF 0x92D2 +0xCBB0 0x98FD +0xCBB1 0x9CF3 +0xCBB2 0x9D6C +0xCBB3 0x4E4F +0xCBB4 0x4EA1 +0xCBB5 0x508D +0xCBB6 0x5256 +0xCBB7 0x574A +0xCBB8 0x59A8 +0xCBB9 0x5E3D +0xCBBA 0x5FD8 +0xCBBB 0x5FD9 +0xCBBC 0x623F +0xCBBD 0x66B4 +0xCBBE 0x671B +0xCBBF 0x67D0 +0xCBC0 0x68D2 +0xCBC1 0x5192 +0xCBC2 0x7D21 +0xCBC3 0x80AA +0xCBC4 0x81A8 +0xCBC5 0x8B00 +0xCBC6 0x8C8C +0xCBC7 0x8CBF +0xCBC8 0x927E +0xCBC9 0x9632 +0xCBCA 0x5420 +0xCBCB 0x982C +0xCBCC 0x5317 +0xCBCD 0x50D5 +0xCBCE 0x535C +0xCBCF 0x58A8 +0xCBD0 0x64B2 +0xCBD1 0x6734 +0xCBD2 0x7267 +0xCBD3 0x7766 +0xCBD4 0x7A46 +0xCBD5 0x91E6 +0xCBD6 0x52C3 +0xCBD7 0x6CA1 +0xCBD8 0x6B86 +0xCBD9 0x5800 +0xCBDA 0x5E4C +0xCBDB 0x5954 +0xCBDC 0x672C +0xCBDD 0x7FFB +0xCBDE 0x51E1 +0xCBDF 0x76C6 +0xCBE0 0x6469 +0xCBE1 0x78E8 +0xCBE2 0x9B54 +0xCBE3 0x9EBB +0xCBE4 0x57CB +0xCBE5 0x59B9 +0xCBE6 0x6627 +0xCBE7 0x679A +0xCBE8 0x6BCE +0xCBE9 0x54E9 +0xCBEA 0x69D9 +0xCBEB 0x5E55 +0xCBEC 0x819C +0xCBED 0x6795 +0xCBEE 0x9BAA +0xCBEF 0x67FE +0xCBF0 0x9C52 +0xCBF1 0x685D +0xCBF2 0x4EA6 +0xCBF3 0x4FE3 +0xCBF4 0x53C8 +0xCBF5 0x62B9 +0xCBF6 0x672B +0xCBF7 0x6CAB +0xCBF8 0x8FC4 +0xCBF9 0x4FAD +0xCBFA 0x7E6D +0xCBFB 0x9EBF +0xCBFC 0x4E07 +0xCBFD 0x6162 +0xCBFE 0x6E80 +0xCCA1 0x6F2B +0xCCA2 0x8513 +0xCCA3 0x5473 +0xCCA4 0x672A +0xCCA5 0x9B45 +0xCCA6 0x5DF3 +0xCCA7 0x7B95 +0xCCA8 0x5CAC +0xCCA9 0x5BC6 +0xCCAA 0x871C +0xCCAB 0x6E4A +0xCCAC 0x84D1 +0xCCAD 0x7A14 +0xCCAE 0x8108 +0xCCAF 0x5999 +0xCCB0 0x7C8D +0xCCB1 0x6C11 +0xCCB2 0x7720 +0xCCB3 0x52D9 +0xCCB4 0x5922 +0xCCB5 0x7121 +0xCCB6 0x725F +0xCCB7 0x77DB +0xCCB8 0x9727 +0xCCB9 0x9D61 +0xCCBA 0x690B +0xCCBB 0x5A7F +0xCCBC 0x5A18 +0xCCBD 0x51A5 +0xCCBE 0x540D +0xCCBF 0x547D +0xCCC0 0x660E +0xCCC1 0x76DF +0xCCC2 0x8FF7 +0xCCC3 0x9298 +0xCCC4 0x9CF4 +0xCCC5 0x59EA +0xCCC6 0x725D +0xCCC7 0x6EC5 +0xCCC8 0x514D +0xCCC9 0x68C9 +0xCCCA 0x7DBF +0xCCCB 0x7DEC +0xCCCC 0x9762 +0xCCCD 0x9EBA +0xCCCE 0x6478 +0xCCCF 0x6A21 +0xCCD0 0x8302 +0xCCD1 0x5984 +0xCCD2 0x5B5F +0xCCD3 0x6BDB +0xCCD4 0x731B +0xCCD5 0x76F2 +0xCCD6 0x7DB2 +0xCCD7 0x8017 +0xCCD8 0x8499 +0xCCD9 0x5132 +0xCCDA 0x6728 +0xCCDB 0x9ED9 +0xCCDC 0x76EE +0xCCDD 0x6762 +0xCCDE 0x52FF +0xCCDF 0x9905 +0xCCE0 0x5C24 +0xCCE1 0x623B +0xCCE2 0x7C7E +0xCCE3 0x8CB0 +0xCCE4 0x554F +0xCCE5 0x60B6 +0xCCE6 0x7D0B +0xCCE7 0x9580 +0xCCE8 0x5301 +0xCCE9 0x4E5F +0xCCEA 0x51B6 +0xCCEB 0x591C +0xCCEC 0x723A +0xCCED 0x8036 +0xCCEE 0x91CE +0xCCEF 0x5F25 +0xCCF0 0x77E2 +0xCCF1 0x5384 +0xCCF2 0x5F79 +0xCCF3 0x7D04 +0xCCF4 0x85AC +0xCCF5 0x8A33 +0xCCF6 0x8E8D +0xCCF7 0x9756 +0xCCF8 0x67F3 +0xCCF9 0x85AE +0xCCFA 0x9453 +0xCCFB 0x6109 +0xCCFC 0x6108 +0xCCFD 0x6CB9 +0xCCFE 0x7652 +0xCDA1 0x8AED +0xCDA2 0x8F38 +0xCDA3 0x552F +0xCDA4 0x4F51 +0xCDA5 0x512A +0xCDA6 0x52C7 +0xCDA7 0x53CB +0xCDA8 0x5BA5 +0xCDA9 0x5E7D +0xCDAA 0x60A0 +0xCDAB 0x6182 +0xCDAC 0x63D6 +0xCDAD 0x6709 +0xCDAE 0x67DA +0xCDAF 0x6E67 +0xCDB0 0x6D8C +0xCDB1 0x7336 +0xCDB2 0x7337 +0xCDB3 0x7531 +0xCDB4 0x7950 +0xCDB5 0x88D5 +0xCDB6 0x8A98 +0xCDB7 0x904A +0xCDB8 0x9091 +0xCDB9 0x90F5 +0xCDBA 0x96C4 +0xCDBB 0x878D +0xCDBC 0x5915 +0xCDBD 0x4E88 +0xCDBE 0x4F59 +0xCDBF 0x4E0E +0xCDC0 0x8A89 +0xCDC1 0x8F3F +0xCDC2 0x9810 +0xCDC3 0x50AD +0xCDC4 0x5E7C +0xCDC5 0x5996 +0xCDC6 0x5BB9 +0xCDC7 0x5EB8 +0xCDC8 0x63DA +0xCDC9 0x63FA +0xCDCA 0x64C1 +0xCDCB 0x66DC +0xCDCC 0x694A +0xCDCD 0x69D8 +0xCDCE 0x6D0B +0xCDCF 0x6EB6 +0xCDD0 0x7194 +0xCDD1 0x7528 +0xCDD2 0x7AAF +0xCDD3 0x7F8A +0xCDD4 0x8000 +0xCDD5 0x8449 +0xCDD6 0x84C9 +0xCDD7 0x8981 +0xCDD8 0x8B21 +0xCDD9 0x8E0A +0xCDDA 0x9065 +0xCDDB 0x967D +0xCDDC 0x990A +0xCDDD 0x617E +0xCDDE 0x6291 +0xCDDF 0x6B32 +0xCDE0 0x6C83 +0xCDE1 0x6D74 +0xCDE2 0x7FCC +0xCDE3 0x7FFC +0xCDE4 0x6DC0 +0xCDE5 0x7F85 +0xCDE6 0x87BA +0xCDE7 0x88F8 +0xCDE8 0x6765 +0xCDE9 0x83B1 +0xCDEA 0x983C +0xCDEB 0x96F7 +0xCDEC 0x6D1B +0xCDED 0x7D61 +0xCDEE 0x843D +0xCDEF 0x916A +0xCDF0 0x4E71 +0xCDF1 0x5375 +0xCDF2 0x5D50 +0xCDF3 0x6B04 +0xCDF4 0x6FEB +0xCDF5 0x85CD +0xCDF6 0x862D +0xCDF7 0x89A7 +0xCDF8 0x5229 +0xCDF9 0x540F +0xCDFA 0x5C65 +0xCDFB 0x674E +0xCDFC 0x68A8 +0xCDFD 0x7406 +0xCDFE 0x7483 +0xCEA1 0x75E2 +0xCEA2 0x88CF +0xCEA3 0x88E1 +0xCEA4 0x91CC +0xCEA5 0x96E2 +0xCEA6 0x9678 +0xCEA7 0x5F8B +0xCEA8 0x7387 +0xCEA9 0x7ACB +0xCEAA 0x844E +0xCEAB 0x63A0 +0xCEAC 0x7565 +0xCEAD 0x5289 +0xCEAE 0x6D41 +0xCEAF 0x6E9C +0xCEB0 0x7409 +0xCEB1 0x7559 +0xCEB2 0x786B +0xCEB3 0x7C92 +0xCEB4 0x9686 +0xCEB5 0x7ADC +0xCEB6 0x9F8D +0xCEB7 0x4FB6 +0xCEB8 0x616E +0xCEB9 0x65C5 +0xCEBA 0x865C +0xCEBB 0x4E86 +0xCEBC 0x4EAE +0xCEBD 0x50DA +0xCEBE 0x4E21 +0xCEBF 0x51CC +0xCEC0 0x5BEE +0xCEC1 0x6599 +0xCEC2 0x6881 +0xCEC3 0x6DBC +0xCEC4 0x731F +0xCEC5 0x7642 +0xCEC6 0x77AD +0xCEC7 0x7A1C +0xCEC8 0x7CE7 +0xCEC9 0x826F +0xCECA 0x8AD2 +0xCECB 0x907C +0xCECC 0x91CF +0xCECD 0x9675 +0xCECE 0x9818 +0xCECF 0x529B +0xCED0 0x7DD1 +0xCED1 0x502B +0xCED2 0x5398 +0xCED3 0x6797 +0xCED4 0x6DCB +0xCED5 0x71D0 +0xCED6 0x7433 +0xCED7 0x81E8 +0xCED8 0x8F2A +0xCED9 0x96A3 +0xCEDA 0x9C57 +0xCEDB 0x9E9F +0xCEDC 0x7460 +0xCEDD 0x5841 +0xCEDE 0x6D99 +0xCEDF 0x7D2F +0xCEE0 0x985E +0xCEE1 0x4EE4 +0xCEE2 0x4F36 +0xCEE3 0x4F8B +0xCEE4 0x51B7 +0xCEE5 0x52B1 +0xCEE6 0x5DBA +0xCEE7 0x601C +0xCEE8 0x73B2 +0xCEE9 0x793C +0xCEEA 0x82D3 +0xCEEB 0x9234 +0xCEEC 0x96B7 +0xCEED 0x96F6 +0xCEEE 0x970A +0xCEEF 0x9E97 +0xCEF0 0x9F62 +0xCEF1 0x66A6 +0xCEF2 0x6B74 +0xCEF3 0x5217 +0xCEF4 0x52A3 +0xCEF5 0x70C8 +0xCEF6 0x88C2 +0xCEF7 0x5EC9 +0xCEF8 0x604B +0xCEF9 0x6190 +0xCEFA 0x6F23 +0xCEFB 0x7149 +0xCEFC 0x7C3E +0xCEFD 0x7DF4 +0xCEFE 0x806F +0xCFA1 0x84EE +0xCFA2 0x9023 +0xCFA3 0x932C +0xCFA4 0x5442 +0xCFA5 0x9B6F +0xCFA6 0x6AD3 +0xCFA7 0x7089 +0xCFA8 0x8CC2 +0xCFA9 0x8DEF +0xCFAA 0x9732 +0xCFAB 0x52B4 +0xCFAC 0x5A41 +0xCFAD 0x5ECA +0xCFAE 0x5F04 +0xCFAF 0x6717 +0xCFB0 0x697C +0xCFB1 0x6994 +0xCFB2 0x6D6A +0xCFB3 0x6F0F +0xCFB4 0x7262 +0xCFB5 0x72FC +0xCFB6 0x7BED +0xCFB7 0x8001 +0xCFB8 0x807E +0xCFB9 0x874B +0xCFBA 0x90CE +0xCFBB 0x516D +0xCFBC 0x9E93 +0xCFBD 0x7984 +0xCFBE 0x808B +0xCFBF 0x9332 +0xCFC0 0x8AD6 +0xCFC1 0x502D +0xCFC2 0x548C +0xCFC3 0x8A71 +0xCFC4 0x6B6A +0xCFC5 0x8CC4 +0xCFC6 0x8107 +0xCFC7 0x60D1 +0xCFC8 0x67A0 +0xCFC9 0x9DF2 +0xCFCA 0x4E99 +0xCFCB 0x4E98 +0xCFCC 0x9C10 +0xCFCD 0x8A6B +0xCFCE 0x85C1 +0xCFCF 0x8568 +0xCFD0 0x6900 +0xCFD1 0x6E7E +0xCFD2 0x7897 +0xCFD3 0x8155 +0xD0A1 0x5F0C +0xD0A2 0x4E10 +0xD0A3 0x4E15 +0xD0A4 0x4E2A +0xD0A5 0x4E31 +0xD0A6 0x4E36 +0xD0A7 0x4E3C +0xD0A8 0x4E3F +0xD0A9 0x4E42 +0xD0AA 0x4E56 +0xD0AB 0x4E58 +0xD0AC 0x4E82 +0xD0AD 0x4E85 +0xD0AE 0x8C6B +0xD0AF 0x4E8A +0xD0B0 0x8212 +0xD0B1 0x5F0D +0xD0B2 0x4E8E +0xD0B3 0x4E9E +0xD0B4 0x4E9F +0xD0B5 0x4EA0 +0xD0B6 0x4EA2 +0xD0B7 0x4EB0 +0xD0B8 0x4EB3 +0xD0B9 0x4EB6 +0xD0BA 0x4ECE +0xD0BB 0x4ECD +0xD0BC 0x4EC4 +0xD0BD 0x4EC6 +0xD0BE 0x4EC2 +0xD0BF 0x4ED7 +0xD0C0 0x4EDE +0xD0C1 0x4EED +0xD0C2 0x4EDF +0xD0C3 0x4EF7 +0xD0C4 0x4F09 +0xD0C5 0x4F5A +0xD0C6 0x4F30 +0xD0C7 0x4F5B +0xD0C8 0x4F5D +0xD0C9 0x4F57 +0xD0CA 0x4F47 +0xD0CB 0x4F76 +0xD0CC 0x4F88 +0xD0CD 0x4F8F +0xD0CE 0x4F98 +0xD0CF 0x4F7B +0xD0D0 0x4F69 +0xD0D1 0x4F70 +0xD0D2 0x4F91 +0xD0D3 0x4F6F +0xD0D4 0x4F86 +0xD0D5 0x4F96 +0xD0D6 0x5118 +0xD0D7 0x4FD4 +0xD0D8 0x4FDF +0xD0D9 0x4FCE +0xD0DA 0x4FD8 +0xD0DB 0x4FDB +0xD0DC 0x4FD1 +0xD0DD 0x4FDA +0xD0DE 0x4FD0 +0xD0DF 0x4FE4 +0xD0E0 0x4FE5 +0xD0E1 0x501A +0xD0E2 0x5028 +0xD0E3 0x5014 +0xD0E4 0x502A +0xD0E5 0x5025 +0xD0E6 0x5005 +0xD0E7 0x4F1C +0xD0E8 0x4FF6 +0xD0E9 0x5021 +0xD0EA 0x5029 +0xD0EB 0x502C +0xD0EC 0x4FFE +0xD0ED 0x4FEF +0xD0EE 0x5011 +0xD0EF 0x5006 +0xD0F0 0x5043 +0xD0F1 0x5047 +0xD0F2 0x6703 +0xD0F3 0x5055 +0xD0F4 0x5050 +0xD0F5 0x5048 +0xD0F6 0x505A +0xD0F7 0x5056 +0xD0F8 0x506C +0xD0F9 0x5078 +0xD0FA 0x5080 +0xD0FB 0x509A +0xD0FC 0x5085 +0xD0FD 0x50B4 +0xD0FE 0x50B2 +0xD1A1 0x50C9 +0xD1A2 0x50CA +0xD1A3 0x50B3 +0xD1A4 0x50C2 +0xD1A5 0x50D6 +0xD1A6 0x50DE +0xD1A7 0x50E5 +0xD1A8 0x50ED +0xD1A9 0x50E3 +0xD1AA 0x50EE +0xD1AB 0x50F9 +0xD1AC 0x50F5 +0xD1AD 0x5109 +0xD1AE 0x5101 +0xD1AF 0x5102 +0xD1B0 0x5116 +0xD1B1 0x5115 +0xD1B2 0x5114 +0xD1B3 0x511A +0xD1B4 0x5121 +0xD1B5 0x513A +0xD1B6 0x5137 +0xD1B7 0x513C +0xD1B8 0x513B +0xD1B9 0x513F +0xD1BA 0x5140 +0xD1BB 0x5152 +0xD1BC 0x514C +0xD1BD 0x5154 +0xD1BE 0x5162 +0xD1BF 0x7AF8 +0xD1C0 0x5169 +0xD1C1 0x516A +0xD1C2 0x516E +0xD1C3 0x5180 +0xD1C4 0x5182 +0xD1C5 0x56D8 +0xD1C6 0x518C +0xD1C7 0x5189 +0xD1C8 0x518F +0xD1C9 0x5191 +0xD1CA 0x5193 +0xD1CB 0x5195 +0xD1CC 0x5196 +0xD1CD 0x51A4 +0xD1CE 0x51A6 +0xD1CF 0x51A2 +0xD1D0 0x51A9 +0xD1D1 0x51AA +0xD1D2 0x51AB +0xD1D3 0x51B3 +0xD1D4 0x51B1 +0xD1D5 0x51B2 +0xD1D6 0x51B0 +0xD1D7 0x51B5 +0xD1D8 0x51BD +0xD1D9 0x51C5 +0xD1DA 0x51C9 +0xD1DB 0x51DB +0xD1DC 0x51E0 +0xD1DD 0x8655 +0xD1DE 0x51E9 +0xD1DF 0x51ED +0xD1E0 0x51F0 +0xD1E1 0x51F5 +0xD1E2 0x51FE +0xD1E3 0x5204 +0xD1E4 0x520B +0xD1E5 0x5214 +0xD1E6 0x520E +0xD1E7 0x5227 +0xD1E8 0x522A +0xD1E9 0x522E +0xD1EA 0x5233 +0xD1EB 0x5239 +0xD1EC 0x524F +0xD1ED 0x5244 +0xD1EE 0x524B +0xD1EF 0x524C +0xD1F0 0x525E +0xD1F1 0x5254 +0xD1F2 0x526A +0xD1F3 0x5274 +0xD1F4 0x5269 +0xD1F5 0x5273 +0xD1F6 0x527F +0xD1F7 0x527D +0xD1F8 0x528D +0xD1F9 0x5294 +0xD1FA 0x5292 +0xD1FB 0x5271 +0xD1FC 0x5288 +0xD1FD 0x5291 +0xD1FE 0x8FA8 +0xD2A1 0x8FA7 +0xD2A2 0x52AC +0xD2A3 0x52AD +0xD2A4 0x52BC +0xD2A5 0x52B5 +0xD2A6 0x52C1 +0xD2A7 0x52CD +0xD2A8 0x52D7 +0xD2A9 0x52DE +0xD2AA 0x52E3 +0xD2AB 0x52E6 +0xD2AC 0x98ED +0xD2AD 0x52E0 +0xD2AE 0x52F3 +0xD2AF 0x52F5 +0xD2B0 0x52F8 +0xD2B1 0x52F9 +0xD2B2 0x5306 +0xD2B3 0x5308 +0xD2B4 0x7538 +0xD2B5 0x530D +0xD2B6 0x5310 +0xD2B7 0x530F +0xD2B8 0x5315 +0xD2B9 0x531A +0xD2BA 0x5323 +0xD2BB 0x532F +0xD2BC 0x5331 +0xD2BD 0x5333 +0xD2BE 0x5338 +0xD2BF 0x5340 +0xD2C0 0x5346 +0xD2C1 0x5345 +0xD2C2 0x4E17 +0xD2C3 0x5349 +0xD2C4 0x534D +0xD2C5 0x51D6 +0xD2C6 0x535E +0xD2C7 0x5369 +0xD2C8 0x536E +0xD2C9 0x5918 +0xD2CA 0x537B +0xD2CB 0x5377 +0xD2CC 0x5382 +0xD2CD 0x5396 +0xD2CE 0x53A0 +0xD2CF 0x53A6 +0xD2D0 0x53A5 +0xD2D1 0x53AE +0xD2D2 0x53B0 +0xD2D3 0x53B6 +0xD2D4 0x53C3 +0xD2D5 0x7C12 +0xD2D6 0x96D9 +0xD2D7 0x53DF +0xD2D8 0x66FC +0xD2D9 0x71EE +0xD2DA 0x53EE +0xD2DB 0x53E8 +0xD2DC 0x53ED +0xD2DD 0x53FA +0xD2DE 0x5401 +0xD2DF 0x543D +0xD2E0 0x5440 +0xD2E1 0x542C +0xD2E2 0x542D +0xD2E3 0x543C +0xD2E4 0x542E +0xD2E5 0x5436 +0xD2E6 0x5429 +0xD2E7 0x541D +0xD2E8 0x544E +0xD2E9 0x548F +0xD2EA 0x5475 +0xD2EB 0x548E +0xD2EC 0x545F +0xD2ED 0x5471 +0xD2EE 0x5477 +0xD2EF 0x5470 +0xD2F0 0x5492 +0xD2F1 0x547B +0xD2F2 0x5480 +0xD2F3 0x5476 +0xD2F4 0x5484 +0xD2F5 0x5490 +0xD2F6 0x5486 +0xD2F7 0x54C7 +0xD2F8 0x54A2 +0xD2F9 0x54B8 +0xD2FA 0x54A5 +0xD2FB 0x54AC +0xD2FC 0x54C4 +0xD2FD 0x54C8 +0xD2FE 0x54A8 +0xD3A1 0x54AB +0xD3A2 0x54C2 +0xD3A3 0x54A4 +0xD3A4 0x54BE +0xD3A5 0x54BC +0xD3A6 0x54D8 +0xD3A7 0x54E5 +0xD3A8 0x54E6 +0xD3A9 0x550F +0xD3AA 0x5514 +0xD3AB 0x54FD +0xD3AC 0x54EE +0xD3AD 0x54ED +0xD3AE 0x54FA +0xD3AF 0x54E2 +0xD3B0 0x5539 +0xD3B1 0x5540 +0xD3B2 0x5563 +0xD3B3 0x554C +0xD3B4 0x552E +0xD3B5 0x555C +0xD3B6 0x5545 +0xD3B7 0x5556 +0xD3B8 0x5557 +0xD3B9 0x5538 +0xD3BA 0x5533 +0xD3BB 0x555D +0xD3BC 0x5599 +0xD3BD 0x5580 +0xD3BE 0x54AF +0xD3BF 0x558A +0xD3C0 0x559F +0xD3C1 0x557B +0xD3C2 0x557E +0xD3C3 0x5598 +0xD3C4 0x559E +0xD3C5 0x55AE +0xD3C6 0x557C +0xD3C7 0x5583 +0xD3C8 0x55A9 +0xD3C9 0x5587 +0xD3CA 0x55A8 +0xD3CB 0x55DA +0xD3CC 0x55C5 +0xD3CD 0x55DF +0xD3CE 0x55C4 +0xD3CF 0x55DC +0xD3D0 0x55E4 +0xD3D1 0x55D4 +0xD3D2 0x5614 +0xD3D3 0x55F7 +0xD3D4 0x5616 +0xD3D5 0x55FE +0xD3D6 0x55FD +0xD3D7 0x561B +0xD3D8 0x55F9 +0xD3D9 0x564E +0xD3DA 0x5650 +0xD3DB 0x71DF +0xD3DC 0x5634 +0xD3DD 0x5636 +0xD3DE 0x5632 +0xD3DF 0x5638 +0xD3E0 0x566B +0xD3E1 0x5664 +0xD3E2 0x562F +0xD3E3 0x566C +0xD3E4 0x566A +0xD3E5 0x5686 +0xD3E6 0x5680 +0xD3E7 0x568A +0xD3E8 0x56A0 +0xD3E9 0x5694 +0xD3EA 0x568F +0xD3EB 0x56A5 +0xD3EC 0x56AE +0xD3ED 0x56B6 +0xD3EE 0x56B4 +0xD3EF 0x56C2 +0xD3F0 0x56BC +0xD3F1 0x56C1 +0xD3F2 0x56C3 +0xD3F3 0x56C0 +0xD3F4 0x56C8 +0xD3F5 0x56CE +0xD3F6 0x56D1 +0xD3F7 0x56D3 +0xD3F8 0x56D7 +0xD3F9 0x56EE +0xD3FA 0x56F9 +0xD3FB 0x5700 +0xD3FC 0x56FF +0xD3FD 0x5704 +0xD3FE 0x5709 +0xD4A1 0x5708 +0xD4A2 0x570B +0xD4A3 0x570D +0xD4A4 0x5713 +0xD4A5 0x5718 +0xD4A6 0x5716 +0xD4A7 0x55C7 +0xD4A8 0x571C +0xD4A9 0x5726 +0xD4AA 0x5737 +0xD4AB 0x5738 +0xD4AC 0x574E +0xD4AD 0x573B +0xD4AE 0x5740 +0xD4AF 0x574F +0xD4B0 0x5769 +0xD4B1 0x57C0 +0xD4B2 0x5788 +0xD4B3 0x5761 +0xD4B4 0x577F +0xD4B5 0x5789 +0xD4B6 0x5793 +0xD4B7 0x57A0 +0xD4B8 0x57B3 +0xD4B9 0x57A4 +0xD4BA 0x57AA +0xD4BB 0x57B0 +0xD4BC 0x57C3 +0xD4BD 0x57C6 +0xD4BE 0x57D4 +0xD4BF 0x57D2 +0xD4C0 0x57D3 +0xD4C1 0x580A +0xD4C2 0x57D6 +0xD4C3 0x57E3 +0xD4C4 0x580B +0xD4C5 0x5819 +0xD4C6 0x581D +0xD4C7 0x5872 +0xD4C8 0x5821 +0xD4C9 0x5862 +0xD4CA 0x584B +0xD4CB 0x5870 +0xD4CC 0x6BC0 +0xD4CD 0x5852 +0xD4CE 0x583D +0xD4CF 0x5879 +0xD4D0 0x5885 +0xD4D1 0x58B9 +0xD4D2 0x589F +0xD4D3 0x58AB +0xD4D4 0x58BA +0xD4D5 0x58DE +0xD4D6 0x58BB +0xD4D7 0x58B8 +0xD4D8 0x58AE +0xD4D9 0x58C5 +0xD4DA 0x58D3 +0xD4DB 0x58D1 +0xD4DC 0x58D7 +0xD4DD 0x58D9 +0xD4DE 0x58D8 +0xD4DF 0x58E5 +0xD4E0 0x58DC +0xD4E1 0x58E4 +0xD4E2 0x58DF +0xD4E3 0x58EF +0xD4E4 0x58FA +0xD4E5 0x58F9 +0xD4E6 0x58FB +0xD4E7 0x58FC +0xD4E8 0x58FD +0xD4E9 0x5902 +0xD4EA 0x590A +0xD4EB 0x5910 +0xD4EC 0x591B +0xD4ED 0x68A6 +0xD4EE 0x5925 +0xD4EF 0x592C +0xD4F0 0x592D +0xD4F1 0x5932 +0xD4F2 0x5938 +0xD4F3 0x593E +0xD4F4 0x7AD2 +0xD4F5 0x5955 +0xD4F6 0x5950 +0xD4F7 0x594E +0xD4F8 0x595A +0xD4F9 0x5958 +0xD4FA 0x5962 +0xD4FB 0x5960 +0xD4FC 0x5967 +0xD4FD 0x596C +0xD4FE 0x5969 +0xD5A1 0x5978 +0xD5A2 0x5981 +0xD5A3 0x599D +0xD5A4 0x4F5E +0xD5A5 0x4FAB +0xD5A6 0x59A3 +0xD5A7 0x59B2 +0xD5A8 0x59C6 +0xD5A9 0x59E8 +0xD5AA 0x59DC +0xD5AB 0x598D +0xD5AC 0x59D9 +0xD5AD 0x59DA +0xD5AE 0x5A25 +0xD5AF 0x5A1F +0xD5B0 0x5A11 +0xD5B1 0x5A1C +0xD5B2 0x5A09 +0xD5B3 0x5A1A +0xD5B4 0x5A40 +0xD5B5 0x5A6C +0xD5B6 0x5A49 +0xD5B7 0x5A35 +0xD5B8 0x5A36 +0xD5B9 0x5A62 +0xD5BA 0x5A6A +0xD5BB 0x5A9A +0xD5BC 0x5ABC +0xD5BD 0x5ABE +0xD5BE 0x5ACB +0xD5BF 0x5AC2 +0xD5C0 0x5ABD +0xD5C1 0x5AE3 +0xD5C2 0x5AD7 +0xD5C3 0x5AE6 +0xD5C4 0x5AE9 +0xD5C5 0x5AD6 +0xD5C6 0x5AFA +0xD5C7 0x5AFB +0xD5C8 0x5B0C +0xD5C9 0x5B0B +0xD5CA 0x5B16 +0xD5CB 0x5B32 +0xD5CC 0x5AD0 +0xD5CD 0x5B2A +0xD5CE 0x5B36 +0xD5CF 0x5B3E +0xD5D0 0x5B43 +0xD5D1 0x5B45 +0xD5D2 0x5B40 +0xD5D3 0x5B51 +0xD5D4 0x5B55 +0xD5D5 0x5B5A +0xD5D6 0x5B5B +0xD5D7 0x5B65 +0xD5D8 0x5B69 +0xD5D9 0x5B70 +0xD5DA 0x5B73 +0xD5DB 0x5B75 +0xD5DC 0x5B78 +0xD5DD 0x6588 +0xD5DE 0x5B7A +0xD5DF 0x5B80 +0xD5E0 0x5B83 +0xD5E1 0x5BA6 +0xD5E2 0x5BB8 +0xD5E3 0x5BC3 +0xD5E4 0x5BC7 +0xD5E5 0x5BC9 +0xD5E6 0x5BD4 +0xD5E7 0x5BD0 +0xD5E8 0x5BE4 +0xD5E9 0x5BE6 +0xD5EA 0x5BE2 +0xD5EB 0x5BDE +0xD5EC 0x5BE5 +0xD5ED 0x5BEB +0xD5EE 0x5BF0 +0xD5EF 0x5BF6 +0xD5F0 0x5BF3 +0xD5F1 0x5C05 +0xD5F2 0x5C07 +0xD5F3 0x5C08 +0xD5F4 0x5C0D +0xD5F5 0x5C13 +0xD5F6 0x5C20 +0xD5F7 0x5C22 +0xD5F8 0x5C28 +0xD5F9 0x5C38 +0xD5FA 0x5C39 +0xD5FB 0x5C41 +0xD5FC 0x5C46 +0xD5FD 0x5C4E +0xD5FE 0x5C53 +0xD6A1 0x5C50 +0xD6A2 0x5C4F +0xD6A3 0x5B71 +0xD6A4 0x5C6C +0xD6A5 0x5C6E +0xD6A6 0x4E62 +0xD6A7 0x5C76 +0xD6A8 0x5C79 +0xD6A9 0x5C8C +0xD6AA 0x5C91 +0xD6AB 0x5C94 +0xD6AC 0x599B +0xD6AD 0x5CAB +0xD6AE 0x5CBB +0xD6AF 0x5CB6 +0xD6B0 0x5CBC +0xD6B1 0x5CB7 +0xD6B2 0x5CC5 +0xD6B3 0x5CBE +0xD6B4 0x5CC7 +0xD6B5 0x5CD9 +0xD6B6 0x5CE9 +0xD6B7 0x5CFD +0xD6B8 0x5CFA +0xD6B9 0x5CED +0xD6BA 0x5D8C +0xD6BB 0x5CEA +0xD6BC 0x5D0B +0xD6BD 0x5D15 +0xD6BE 0x5D17 +0xD6BF 0x5D5C +0xD6C0 0x5D1F +0xD6C1 0x5D1B +0xD6C2 0x5D11 +0xD6C3 0x5D14 +0xD6C4 0x5D22 +0xD6C5 0x5D1A +0xD6C6 0x5D19 +0xD6C7 0x5D18 +0xD6C8 0x5D4C +0xD6C9 0x5D52 +0xD6CA 0x5D4E +0xD6CB 0x5D4B +0xD6CC 0x5D6C +0xD6CD 0x5D73 +0xD6CE 0x5D76 +0xD6CF 0x5D87 +0xD6D0 0x5D84 +0xD6D1 0x5D82 +0xD6D2 0x5DA2 +0xD6D3 0x5D9D +0xD6D4 0x5DAC +0xD6D5 0x5DAE +0xD6D6 0x5DBD +0xD6D7 0x5D90 +0xD6D8 0x5DB7 +0xD6D9 0x5DBC +0xD6DA 0x5DC9 +0xD6DB 0x5DCD +0xD6DC 0x5DD3 +0xD6DD 0x5DD2 +0xD6DE 0x5DD6 +0xD6DF 0x5DDB +0xD6E0 0x5DEB +0xD6E1 0x5DF2 +0xD6E2 0x5DF5 +0xD6E3 0x5E0B +0xD6E4 0x5E1A +0xD6E5 0x5E19 +0xD6E6 0x5E11 +0xD6E7 0x5E1B +0xD6E8 0x5E36 +0xD6E9 0x5E37 +0xD6EA 0x5E44 +0xD6EB 0x5E43 +0xD6EC 0x5E40 +0xD6ED 0x5E4E +0xD6EE 0x5E57 +0xD6EF 0x5E54 +0xD6F0 0x5E5F +0xD6F1 0x5E62 +0xD6F2 0x5E64 +0xD6F3 0x5E47 +0xD6F4 0x5E75 +0xD6F5 0x5E76 +0xD6F6 0x5E7A +0xD6F7 0x9EBC +0xD6F8 0x5E7F +0xD6F9 0x5EA0 +0xD6FA 0x5EC1 +0xD6FB 0x5EC2 +0xD6FC 0x5EC8 +0xD6FD 0x5ED0 +0xD6FE 0x5ECF +0xD7A1 0x5ED6 +0xD7A2 0x5EE3 +0xD7A3 0x5EDD +0xD7A4 0x5EDA +0xD7A5 0x5EDB +0xD7A6 0x5EE2 +0xD7A7 0x5EE1 +0xD7A8 0x5EE8 +0xD7A9 0x5EE9 +0xD7AA 0x5EEC +0xD7AB 0x5EF1 +0xD7AC 0x5EF3 +0xD7AD 0x5EF0 +0xD7AE 0x5EF4 +0xD7AF 0x5EF8 +0xD7B0 0x5EFE +0xD7B1 0x5F03 +0xD7B2 0x5F09 +0xD7B3 0x5F5D +0xD7B4 0x5F5C +0xD7B5 0x5F0B +0xD7B6 0x5F11 +0xD7B7 0x5F16 +0xD7B8 0x5F29 +0xD7B9 0x5F2D +0xD7BA 0x5F38 +0xD7BB 0x5F41 +0xD7BC 0x5F48 +0xD7BD 0x5F4C +0xD7BE 0x5F4E +0xD7BF 0x5F2F +0xD7C0 0x5F51 +0xD7C1 0x5F56 +0xD7C2 0x5F57 +0xD7C3 0x5F59 +0xD7C4 0x5F61 +0xD7C5 0x5F6D +0xD7C6 0x5F73 +0xD7C7 0x5F77 +0xD7C8 0x5F83 +0xD7C9 0x5F82 +0xD7CA 0x5F7F +0xD7CB 0x5F8A +0xD7CC 0x5F88 +0xD7CD 0x5F91 +0xD7CE 0x5F87 +0xD7CF 0x5F9E +0xD7D0 0x5F99 +0xD7D1 0x5F98 +0xD7D2 0x5FA0 +0xD7D3 0x5FA8 +0xD7D4 0x5FAD +0xD7D5 0x5FBC +0xD7D6 0x5FD6 +0xD7D7 0x5FFB +0xD7D8 0x5FE4 +0xD7D9 0x5FF8 +0xD7DA 0x5FF1 +0xD7DB 0x5FDD +0xD7DC 0x60B3 +0xD7DD 0x5FFF +0xD7DE 0x6021 +0xD7DF 0x6060 +0xD7E0 0x6019 +0xD7E1 0x6010 +0xD7E2 0x6029 +0xD7E3 0x600E +0xD7E4 0x6031 +0xD7E5 0x601B +0xD7E6 0x6015 +0xD7E7 0x602B +0xD7E8 0x6026 +0xD7E9 0x600F +0xD7EA 0x603A +0xD7EB 0x605A +0xD7EC 0x6041 +0xD7ED 0x606A +0xD7EE 0x6077 +0xD7EF 0x605F +0xD7F0 0x604A +0xD7F1 0x6046 +0xD7F2 0x604D +0xD7F3 0x6063 +0xD7F4 0x6043 +0xD7F5 0x6064 +0xD7F6 0x6042 +0xD7F7 0x606C +0xD7F8 0x606B +0xD7F9 0x6059 +0xD7FA 0x6081 +0xD7FB 0x608D +0xD7FC 0x60E7 +0xD7FD 0x6083 +0xD7FE 0x609A +0xD8A1 0x6084 +0xD8A2 0x609B +0xD8A3 0x6096 +0xD8A4 0x6097 +0xD8A5 0x6092 +0xD8A6 0x60A7 +0xD8A7 0x608B +0xD8A8 0x60E1 +0xD8A9 0x60B8 +0xD8AA 0x60E0 +0xD8AB 0x60D3 +0xD8AC 0x60B4 +0xD8AD 0x5FF0 +0xD8AE 0x60BD +0xD8AF 0x60C6 +0xD8B0 0x60B5 +0xD8B1 0x60D8 +0xD8B2 0x614D +0xD8B3 0x6115 +0xD8B4 0x6106 +0xD8B5 0x60F6 +0xD8B6 0x60F7 +0xD8B7 0x6100 +0xD8B8 0x60F4 +0xD8B9 0x60FA +0xD8BA 0x6103 +0xD8BB 0x6121 +0xD8BC 0x60FB +0xD8BD 0x60F1 +0xD8BE 0x610D +0xD8BF 0x610E +0xD8C0 0x6147 +0xD8C1 0x613E +0xD8C2 0x6128 +0xD8C3 0x6127 +0xD8C4 0x614A +0xD8C5 0x613F +0xD8C6 0x613C +0xD8C7 0x612C +0xD8C8 0x6134 +0xD8C9 0x613D +0xD8CA 0x6142 +0xD8CB 0x6144 +0xD8CC 0x6173 +0xD8CD 0x6177 +0xD8CE 0x6158 +0xD8CF 0x6159 +0xD8D0 0x615A +0xD8D1 0x616B +0xD8D2 0x6174 +0xD8D3 0x616F +0xD8D4 0x6165 +0xD8D5 0x6171 +0xD8D6 0x615F +0xD8D7 0x615D +0xD8D8 0x6153 +0xD8D9 0x6175 +0xD8DA 0x6199 +0xD8DB 0x6196 +0xD8DC 0x6187 +0xD8DD 0x61AC +0xD8DE 0x6194 +0xD8DF 0x619A +0xD8E0 0x618A +0xD8E1 0x6191 +0xD8E2 0x61AB +0xD8E3 0x61AE +0xD8E4 0x61CC +0xD8E5 0x61CA +0xD8E6 0x61C9 +0xD8E7 0x61F7 +0xD8E8 0x61C8 +0xD8E9 0x61C3 +0xD8EA 0x61C6 +0xD8EB 0x61BA +0xD8EC 0x61CB +0xD8ED 0x7F79 +0xD8EE 0x61CD +0xD8EF 0x61E6 +0xD8F0 0x61E3 +0xD8F1 0x61F6 +0xD8F2 0x61FA +0xD8F3 0x61F4 +0xD8F4 0x61FF +0xD8F5 0x61FD +0xD8F6 0x61FC +0xD8F7 0x61FE +0xD8F8 0x6200 +0xD8F9 0x6208 +0xD8FA 0x6209 +0xD8FB 0x620D +0xD8FC 0x620C +0xD8FD 0x6214 +0xD8FE 0x621B +0xD9A1 0x621E +0xD9A2 0x6221 +0xD9A3 0x622A +0xD9A4 0x622E +0xD9A5 0x6230 +0xD9A6 0x6232 +0xD9A7 0x6233 +0xD9A8 0x6241 +0xD9A9 0x624E +0xD9AA 0x625E +0xD9AB 0x6263 +0xD9AC 0x625B +0xD9AD 0x6260 +0xD9AE 0x6268 +0xD9AF 0x627C +0xD9B0 0x6282 +0xD9B1 0x6289 +0xD9B2 0x627E +0xD9B3 0x6292 +0xD9B4 0x6293 +0xD9B5 0x6296 +0xD9B6 0x62D4 +0xD9B7 0x6283 +0xD9B8 0x6294 +0xD9B9 0x62D7 +0xD9BA 0x62D1 +0xD9BB 0x62BB +0xD9BC 0x62CF +0xD9BD 0x62FF +0xD9BE 0x62C6 +0xD9BF 0x64D4 +0xD9C0 0x62C8 +0xD9C1 0x62DC +0xD9C2 0x62CC +0xD9C3 0x62CA +0xD9C4 0x62C2 +0xD9C5 0x62C7 +0xD9C6 0x629B +0xD9C7 0x62C9 +0xD9C8 0x630C +0xD9C9 0x62EE +0xD9CA 0x62F1 +0xD9CB 0x6327 +0xD9CC 0x6302 +0xD9CD 0x6308 +0xD9CE 0x62EF +0xD9CF 0x62F5 +0xD9D0 0x6350 +0xD9D1 0x633E +0xD9D2 0x634D +0xD9D3 0x641C +0xD9D4 0x634F +0xD9D5 0x6396 +0xD9D6 0x638E +0xD9D7 0x6380 +0xD9D8 0x63AB +0xD9D9 0x6376 +0xD9DA 0x63A3 +0xD9DB 0x638F +0xD9DC 0x6389 +0xD9DD 0x639F +0xD9DE 0x63B5 +0xD9DF 0x636B +0xD9E0 0x6369 +0xD9E1 0x63BE +0xD9E2 0x63E9 +0xD9E3 0x63C0 +0xD9E4 0x63C6 +0xD9E5 0x63E3 +0xD9E6 0x63C9 +0xD9E7 0x63D2 +0xD9E8 0x63F6 +0xD9E9 0x63C4 +0xD9EA 0x6416 +0xD9EB 0x6434 +0xD9EC 0x6406 +0xD9ED 0x6413 +0xD9EE 0x6426 +0xD9EF 0x6436 +0xD9F0 0x651D +0xD9F1 0x6417 +0xD9F2 0x6428 +0xD9F3 0x640F +0xD9F4 0x6467 +0xD9F5 0x646F +0xD9F6 0x6476 +0xD9F7 0x644E +0xD9F8 0x652A +0xD9F9 0x6495 +0xD9FA 0x6493 +0xD9FB 0x64A5 +0xD9FC 0x64A9 +0xD9FD 0x6488 +0xD9FE 0x64BC +0xDAA1 0x64DA +0xDAA2 0x64D2 +0xDAA3 0x64C5 +0xDAA4 0x64C7 +0xDAA5 0x64BB +0xDAA6 0x64D8 +0xDAA7 0x64C2 +0xDAA8 0x64F1 +0xDAA9 0x64E7 +0xDAAA 0x8209 +0xDAAB 0x64E0 +0xDAAC 0x64E1 +0xDAAD 0x62AC +0xDAAE 0x64E3 +0xDAAF 0x64EF +0xDAB0 0x652C +0xDAB1 0x64F6 +0xDAB2 0x64F4 +0xDAB3 0x64F2 +0xDAB4 0x64FA +0xDAB5 0x6500 +0xDAB6 0x64FD +0xDAB7 0x6518 +0xDAB8 0x651C +0xDAB9 0x6505 +0xDABA 0x6524 +0xDABB 0x6523 +0xDABC 0x652B +0xDABD 0x6534 +0xDABE 0x6535 +0xDABF 0x6537 +0xDAC0 0x6536 +0xDAC1 0x6538 +0xDAC2 0x754B +0xDAC3 0x6548 +0xDAC4 0x6556 +0xDAC5 0x6555 +0xDAC6 0x654D +0xDAC7 0x6558 +0xDAC8 0x655E +0xDAC9 0x655D +0xDACA 0x6572 +0xDACB 0x6578 +0xDACC 0x6582 +0xDACD 0x6583 +0xDACE 0x8B8A +0xDACF 0x659B +0xDAD0 0x659F +0xDAD1 0x65AB +0xDAD2 0x65B7 +0xDAD3 0x65C3 +0xDAD4 0x65C6 +0xDAD5 0x65C1 +0xDAD6 0x65C4 +0xDAD7 0x65CC +0xDAD8 0x65D2 +0xDAD9 0x65DB +0xDADA 0x65D9 +0xDADB 0x65E0 +0xDADC 0x65E1 +0xDADD 0x65F1 +0xDADE 0x6772 +0xDADF 0x660A +0xDAE0 0x6603 +0xDAE1 0x65FB +0xDAE2 0x6773 +0xDAE3 0x6635 +0xDAE4 0x6636 +0xDAE5 0x6634 +0xDAE6 0x661C +0xDAE7 0x664F +0xDAE8 0x6644 +0xDAE9 0x6649 +0xDAEA 0x6641 +0xDAEB 0x665E +0xDAEC 0x665D +0xDAED 0x6664 +0xDAEE 0x6667 +0xDAEF 0x6668 +0xDAF0 0x665F +0xDAF1 0x6662 +0xDAF2 0x6670 +0xDAF3 0x6683 +0xDAF4 0x6688 +0xDAF5 0x668E +0xDAF6 0x6689 +0xDAF7 0x6684 +0xDAF8 0x6698 +0xDAF9 0x669D +0xDAFA 0x66C1 +0xDAFB 0x66B9 +0xDAFC 0x66C9 +0xDAFD 0x66BE +0xDAFE 0x66BC +0xDBA1 0x66C4 +0xDBA2 0x66B8 +0xDBA3 0x66D6 +0xDBA4 0x66DA +0xDBA5 0x66E0 +0xDBA6 0x663F +0xDBA7 0x66E6 +0xDBA8 0x66E9 +0xDBA9 0x66F0 +0xDBAA 0x66F5 +0xDBAB 0x66F7 +0xDBAC 0x670F +0xDBAD 0x6716 +0xDBAE 0x671E +0xDBAF 0x6726 +0xDBB0 0x6727 +0xDBB1 0x9738 +0xDBB2 0x672E +0xDBB3 0x673F +0xDBB4 0x6736 +0xDBB5 0x6741 +0xDBB6 0x6738 +0xDBB7 0x6737 +0xDBB8 0x6746 +0xDBB9 0x675E +0xDBBA 0x6760 +0xDBBB 0x6759 +0xDBBC 0x6763 +0xDBBD 0x6764 +0xDBBE 0x6789 +0xDBBF 0x6770 +0xDBC0 0x67A9 +0xDBC1 0x677C +0xDBC2 0x676A +0xDBC3 0x678C +0xDBC4 0x678B +0xDBC5 0x67A6 +0xDBC6 0x67A1 +0xDBC7 0x6785 +0xDBC8 0x67B7 +0xDBC9 0x67EF +0xDBCA 0x67B4 +0xDBCB 0x67EC +0xDBCC 0x67B3 +0xDBCD 0x67E9 +0xDBCE 0x67B8 +0xDBCF 0x67E4 +0xDBD0 0x67DE +0xDBD1 0x67DD +0xDBD2 0x67E2 +0xDBD3 0x67EE +0xDBD4 0x67B9 +0xDBD5 0x67CE +0xDBD6 0x67C6 +0xDBD7 0x67E7 +0xDBD8 0x6A9C +0xDBD9 0x681E +0xDBDA 0x6846 +0xDBDB 0x6829 +0xDBDC 0x6840 +0xDBDD 0x684D +0xDBDE 0x6832 +0xDBDF 0x684E +0xDBE0 0x68B3 +0xDBE1 0x682B +0xDBE2 0x6859 +0xDBE3 0x6863 +0xDBE4 0x6877 +0xDBE5 0x687F +0xDBE6 0x689F +0xDBE7 0x688F +0xDBE8 0x68AD +0xDBE9 0x6894 +0xDBEA 0x689D +0xDBEB 0x689B +0xDBEC 0x6883 +0xDBED 0x6AAE +0xDBEE 0x68B9 +0xDBEF 0x6874 +0xDBF0 0x68B5 +0xDBF1 0x68A0 +0xDBF2 0x68BA +0xDBF3 0x690F +0xDBF4 0x688D +0xDBF5 0x687E +0xDBF6 0x6901 +0xDBF7 0x68CA +0xDBF8 0x6908 +0xDBF9 0x68D8 +0xDBFA 0x6922 +0xDBFB 0x6926 +0xDBFC 0x68E1 +0xDBFD 0x690C +0xDBFE 0x68CD +0xDCA1 0x68D4 +0xDCA2 0x68E7 +0xDCA3 0x68D5 +0xDCA4 0x6936 +0xDCA5 0x6912 +0xDCA6 0x6904 +0xDCA7 0x68D7 +0xDCA8 0x68E3 +0xDCA9 0x6925 +0xDCAA 0x68F9 +0xDCAB 0x68E0 +0xDCAC 0x68EF +0xDCAD 0x6928 +0xDCAE 0x692A +0xDCAF 0x691A +0xDCB0 0x6923 +0xDCB1 0x6921 +0xDCB2 0x68C6 +0xDCB3 0x6979 +0xDCB4 0x6977 +0xDCB5 0x695C +0xDCB6 0x6978 +0xDCB7 0x696B +0xDCB8 0x6954 +0xDCB9 0x697E +0xDCBA 0x696E +0xDCBB 0x6939 +0xDCBC 0x6974 +0xDCBD 0x693D +0xDCBE 0x6959 +0xDCBF 0x6930 +0xDCC0 0x6961 +0xDCC1 0x695E +0xDCC2 0x695D +0xDCC3 0x6981 +0xDCC4 0x696A +0xDCC5 0x69B2 +0xDCC6 0x69AE +0xDCC7 0x69D0 +0xDCC8 0x69BF +0xDCC9 0x69C1 +0xDCCA 0x69D3 +0xDCCB 0x69BE +0xDCCC 0x69CE +0xDCCD 0x5BE8 +0xDCCE 0x69CA +0xDCCF 0x69DD +0xDCD0 0x69BB +0xDCD1 0x69C3 +0xDCD2 0x69A7 +0xDCD3 0x6A2E +0xDCD4 0x6991 +0xDCD5 0x69A0 +0xDCD6 0x699C +0xDCD7 0x6995 +0xDCD8 0x69B4 +0xDCD9 0x69DE +0xDCDA 0x69E8 +0xDCDB 0x6A02 +0xDCDC 0x6A1B +0xDCDD 0x69FF +0xDCDE 0x6B0A +0xDCDF 0x69F9 +0xDCE0 0x69F2 +0xDCE1 0x69E7 +0xDCE2 0x6A05 +0xDCE3 0x69B1 +0xDCE4 0x6A1E +0xDCE5 0x69ED +0xDCE6 0x6A14 +0xDCE7 0x69EB +0xDCE8 0x6A0A +0xDCE9 0x6A12 +0xDCEA 0x6AC1 +0xDCEB 0x6A23 +0xDCEC 0x6A13 +0xDCED 0x6A44 +0xDCEE 0x6A0C +0xDCEF 0x6A72 +0xDCF0 0x6A36 +0xDCF1 0x6A78 +0xDCF2 0x6A47 +0xDCF3 0x6A62 +0xDCF4 0x6A59 +0xDCF5 0x6A66 +0xDCF6 0x6A48 +0xDCF7 0x6A38 +0xDCF8 0x6A22 +0xDCF9 0x6A90 +0xDCFA 0x6A8D +0xDCFB 0x6AA0 +0xDCFC 0x6A84 +0xDCFD 0x6AA2 +0xDCFE 0x6AA3 +0xDDA1 0x6A97 +0xDDA2 0x8617 +0xDDA3 0x6ABB +0xDDA4 0x6AC3 +0xDDA5 0x6AC2 +0xDDA6 0x6AB8 +0xDDA7 0x6AB3 +0xDDA8 0x6AAC +0xDDA9 0x6ADE +0xDDAA 0x6AD1 +0xDDAB 0x6ADF +0xDDAC 0x6AAA +0xDDAD 0x6ADA +0xDDAE 0x6AEA +0xDDAF 0x6AFB +0xDDB0 0x6B05 +0xDDB1 0x8616 +0xDDB2 0x6AFA +0xDDB3 0x6B12 +0xDDB4 0x6B16 +0xDDB5 0x9B31 +0xDDB6 0x6B1F +0xDDB7 0x6B38 +0xDDB8 0x6B37 +0xDDB9 0x76DC +0xDDBA 0x6B39 +0xDDBB 0x98EE +0xDDBC 0x6B47 +0xDDBD 0x6B43 +0xDDBE 0x6B49 +0xDDBF 0x6B50 +0xDDC0 0x6B59 +0xDDC1 0x6B54 +0xDDC2 0x6B5B +0xDDC3 0x6B5F +0xDDC4 0x6B61 +0xDDC5 0x6B78 +0xDDC6 0x6B79 +0xDDC7 0x6B7F +0xDDC8 0x6B80 +0xDDC9 0x6B84 +0xDDCA 0x6B83 +0xDDCB 0x6B8D +0xDDCC 0x6B98 +0xDDCD 0x6B95 +0xDDCE 0x6B9E +0xDDCF 0x6BA4 +0xDDD0 0x6BAA +0xDDD1 0x6BAB +0xDDD2 0x6BAF +0xDDD3 0x6BB2 +0xDDD4 0x6BB1 +0xDDD5 0x6BB3 +0xDDD6 0x6BB7 +0xDDD7 0x6BBC +0xDDD8 0x6BC6 +0xDDD9 0x6BCB +0xDDDA 0x6BD3 +0xDDDB 0x6BDF +0xDDDC 0x6BEC +0xDDDD 0x6BEB +0xDDDE 0x6BF3 +0xDDDF 0x6BEF +0xDDE0 0x9EBE +0xDDE1 0x6C08 +0xDDE2 0x6C13 +0xDDE3 0x6C14 +0xDDE4 0x6C1B +0xDDE5 0x6C24 +0xDDE6 0x6C23 +0xDDE7 0x6C5E +0xDDE8 0x6C55 +0xDDE9 0x6C62 +0xDDEA 0x6C6A +0xDDEB 0x6C82 +0xDDEC 0x6C8D +0xDDED 0x6C9A +0xDDEE 0x6C81 +0xDDEF 0x6C9B +0xDDF0 0x6C7E +0xDDF1 0x6C68 +0xDDF2 0x6C73 +0xDDF3 0x6C92 +0xDDF4 0x6C90 +0xDDF5 0x6CC4 +0xDDF6 0x6CF1 +0xDDF7 0x6CD3 +0xDDF8 0x6CBD +0xDDF9 0x6CD7 +0xDDFA 0x6CC5 +0xDDFB 0x6CDD +0xDDFC 0x6CAE +0xDDFD 0x6CB1 +0xDDFE 0x6CBE +0xDEA1 0x6CBA +0xDEA2 0x6CDB +0xDEA3 0x6CEF +0xDEA4 0x6CD9 +0xDEA5 0x6CEA +0xDEA6 0x6D1F +0xDEA7 0x884D +0xDEA8 0x6D36 +0xDEA9 0x6D2B +0xDEAA 0x6D3D +0xDEAB 0x6D38 +0xDEAC 0x6D19 +0xDEAD 0x6D35 +0xDEAE 0x6D33 +0xDEAF 0x6D12 +0xDEB0 0x6D0C +0xDEB1 0x6D63 +0xDEB2 0x6D93 +0xDEB3 0x6D64 +0xDEB4 0x6D5A +0xDEB5 0x6D79 +0xDEB6 0x6D59 +0xDEB7 0x6D8E +0xDEB8 0x6D95 +0xDEB9 0x6FE4 +0xDEBA 0x6D85 +0xDEBB 0x6DF9 +0xDEBC 0x6E15 +0xDEBD 0x6E0A +0xDEBE 0x6DB5 +0xDEBF 0x6DC7 +0xDEC0 0x6DE6 +0xDEC1 0x6DB8 +0xDEC2 0x6DC6 +0xDEC3 0x6DEC +0xDEC4 0x6DDE +0xDEC5 0x6DCC +0xDEC6 0x6DE8 +0xDEC7 0x6DD2 +0xDEC8 0x6DC5 +0xDEC9 0x6DFA +0xDECA 0x6DD9 +0xDECB 0x6DE4 +0xDECC 0x6DD5 +0xDECD 0x6DEA +0xDECE 0x6DEE +0xDECF 0x6E2D +0xDED0 0x6E6E +0xDED1 0x6E2E +0xDED2 0x6E19 +0xDED3 0x6E72 +0xDED4 0x6E5F +0xDED5 0x6E3E +0xDED6 0x6E23 +0xDED7 0x6E6B +0xDED8 0x6E2B +0xDED9 0x6E76 +0xDEDA 0x6E4D +0xDEDB 0x6E1F +0xDEDC 0x6E43 +0xDEDD 0x6E3A +0xDEDE 0x6E4E +0xDEDF 0x6E24 +0xDEE0 0x6EFF +0xDEE1 0x6E1D +0xDEE2 0x6E38 +0xDEE3 0x6E82 +0xDEE4 0x6EAA +0xDEE5 0x6E98 +0xDEE6 0x6EC9 +0xDEE7 0x6EB7 +0xDEE8 0x6ED3 +0xDEE9 0x6EBD +0xDEEA 0x6EAF +0xDEEB 0x6EC4 +0xDEEC 0x6EB2 +0xDEED 0x6ED4 +0xDEEE 0x6ED5 +0xDEEF 0x6E8F +0xDEF0 0x6EA5 +0xDEF1 0x6EC2 +0xDEF2 0x6E9F +0xDEF3 0x6F41 +0xDEF4 0x6F11 +0xDEF5 0x704C +0xDEF6 0x6EEC +0xDEF7 0x6EF8 +0xDEF8 0x6EFE +0xDEF9 0x6F3F +0xDEFA 0x6EF2 +0xDEFB 0x6F31 +0xDEFC 0x6EEF +0xDEFD 0x6F32 +0xDEFE 0x6ECC +0xDFA1 0x6F3E +0xDFA2 0x6F13 +0xDFA3 0x6EF7 +0xDFA4 0x6F86 +0xDFA5 0x6F7A +0xDFA6 0x6F78 +0xDFA7 0x6F81 +0xDFA8 0x6F80 +0xDFA9 0x6F6F +0xDFAA 0x6F5B +0xDFAB 0x6FF3 +0xDFAC 0x6F6D +0xDFAD 0x6F82 +0xDFAE 0x6F7C +0xDFAF 0x6F58 +0xDFB0 0x6F8E +0xDFB1 0x6F91 +0xDFB2 0x6FC2 +0xDFB3 0x6F66 +0xDFB4 0x6FB3 +0xDFB5 0x6FA3 +0xDFB6 0x6FA1 +0xDFB7 0x6FA4 +0xDFB8 0x6FB9 +0xDFB9 0x6FC6 +0xDFBA 0x6FAA +0xDFBB 0x6FDF +0xDFBC 0x6FD5 +0xDFBD 0x6FEC +0xDFBE 0x6FD4 +0xDFBF 0x6FD8 +0xDFC0 0x6FF1 +0xDFC1 0x6FEE +0xDFC2 0x6FDB +0xDFC3 0x7009 +0xDFC4 0x700B +0xDFC5 0x6FFA +0xDFC6 0x7011 +0xDFC7 0x7001 +0xDFC8 0x700F +0xDFC9 0x6FFE +0xDFCA 0x701B +0xDFCB 0x701A +0xDFCC 0x6F74 +0xDFCD 0x701D +0xDFCE 0x7018 +0xDFCF 0x701F +0xDFD0 0x7030 +0xDFD1 0x703E +0xDFD2 0x7032 +0xDFD3 0x7051 +0xDFD4 0x7063 +0xDFD5 0x7099 +0xDFD6 0x7092 +0xDFD7 0x70AF +0xDFD8 0x70F1 +0xDFD9 0x70AC +0xDFDA 0x70B8 +0xDFDB 0x70B3 +0xDFDC 0x70AE +0xDFDD 0x70DF +0xDFDE 0x70CB +0xDFDF 0x70DD +0xDFE0 0x70D9 +0xDFE1 0x7109 +0xDFE2 0x70FD +0xDFE3 0x711C +0xDFE4 0x7119 +0xDFE5 0x7165 +0xDFE6 0x7155 +0xDFE7 0x7188 +0xDFE8 0x7166 +0xDFE9 0x7162 +0xDFEA 0x714C +0xDFEB 0x7156 +0xDFEC 0x716C +0xDFED 0x718F +0xDFEE 0x71FB +0xDFEF 0x7184 +0xDFF0 0x7195 +0xDFF1 0x71A8 +0xDFF2 0x71AC +0xDFF3 0x71D7 +0xDFF4 0x71B9 +0xDFF5 0x71BE +0xDFF6 0x71D2 +0xDFF7 0x71C9 +0xDFF8 0x71D4 +0xDFF9 0x71CE +0xDFFA 0x71E0 +0xDFFB 0x71EC +0xDFFC 0x71E7 +0xDFFD 0x71F5 +0xDFFE 0x71FC +0xE0A1 0x71F9 +0xE0A2 0x71FF +0xE0A3 0x720D +0xE0A4 0x7210 +0xE0A5 0x721B +0xE0A6 0x7228 +0xE0A7 0x722D +0xE0A8 0x722C +0xE0A9 0x7230 +0xE0AA 0x7232 +0xE0AB 0x723B +0xE0AC 0x723C +0xE0AD 0x723F +0xE0AE 0x7240 +0xE0AF 0x7246 +0xE0B0 0x724B +0xE0B1 0x7258 +0xE0B2 0x7274 +0xE0B3 0x727E +0xE0B4 0x7282 +0xE0B5 0x7281 +0xE0B6 0x7287 +0xE0B7 0x7292 +0xE0B8 0x7296 +0xE0B9 0x72A2 +0xE0BA 0x72A7 +0xE0BB 0x72B9 +0xE0BC 0x72B2 +0xE0BD 0x72C3 +0xE0BE 0x72C6 +0xE0BF 0x72C4 +0xE0C0 0x72CE +0xE0C1 0x72D2 +0xE0C2 0x72E2 +0xE0C3 0x72E0 +0xE0C4 0x72E1 +0xE0C5 0x72F9 +0xE0C6 0x72F7 +0xE0C7 0x500F +0xE0C8 0x7317 +0xE0C9 0x730A +0xE0CA 0x731C +0xE0CB 0x7316 +0xE0CC 0x731D +0xE0CD 0x7334 +0xE0CE 0x732F +0xE0CF 0x7329 +0xE0D0 0x7325 +0xE0D1 0x733E +0xE0D2 0x734E +0xE0D3 0x734F +0xE0D4 0x9ED8 +0xE0D5 0x7357 +0xE0D6 0x736A +0xE0D7 0x7368 +0xE0D8 0x7370 +0xE0D9 0x7378 +0xE0DA 0x7375 +0xE0DB 0x737B +0xE0DC 0x737A +0xE0DD 0x73C8 +0xE0DE 0x73B3 +0xE0DF 0x73CE +0xE0E0 0x73BB +0xE0E1 0x73C0 +0xE0E2 0x73E5 +0xE0E3 0x73EE +0xE0E4 0x73DE +0xE0E5 0x74A2 +0xE0E6 0x7405 +0xE0E7 0x746F +0xE0E8 0x7425 +0xE0E9 0x73F8 +0xE0EA 0x7432 +0xE0EB 0x743A +0xE0EC 0x7455 +0xE0ED 0x743F +0xE0EE 0x745F +0xE0EF 0x7459 +0xE0F0 0x7441 +0xE0F1 0x745C +0xE0F2 0x7469 +0xE0F3 0x7470 +0xE0F4 0x7463 +0xE0F5 0x746A +0xE0F6 0x7476 +0xE0F7 0x747E +0xE0F8 0x748B +0xE0F9 0x749E +0xE0FA 0x74A7 +0xE0FB 0x74CA +0xE0FC 0x74CF +0xE0FD 0x74D4 +0xE0FE 0x73F1 +0xE1A1 0x74E0 +0xE1A2 0x74E3 +0xE1A3 0x74E7 +0xE1A4 0x74E9 +0xE1A5 0x74EE +0xE1A6 0x74F2 +0xE1A7 0x74F0 +0xE1A8 0x74F1 +0xE1A9 0x74F8 +0xE1AA 0x74F7 +0xE1AB 0x7504 +0xE1AC 0x7503 +0xE1AD 0x7505 +0xE1AE 0x750C +0xE1AF 0x750E +0xE1B0 0x750D +0xE1B1 0x7515 +0xE1B2 0x7513 +0xE1B3 0x751E +0xE1B4 0x7526 +0xE1B5 0x752C +0xE1B6 0x753C +0xE1B7 0x7544 +0xE1B8 0x754D +0xE1B9 0x754A +0xE1BA 0x7549 +0xE1BB 0x755B +0xE1BC 0x7546 +0xE1BD 0x755A +0xE1BE 0x7569 +0xE1BF 0x7564 +0xE1C0 0x7567 +0xE1C1 0x756B +0xE1C2 0x756D +0xE1C3 0x7578 +0xE1C4 0x7576 +0xE1C5 0x7586 +0xE1C6 0x7587 +0xE1C7 0x7574 +0xE1C8 0x758A +0xE1C9 0x7589 +0xE1CA 0x7582 +0xE1CB 0x7594 +0xE1CC 0x759A +0xE1CD 0x759D +0xE1CE 0x75A5 +0xE1CF 0x75A3 +0xE1D0 0x75C2 +0xE1D1 0x75B3 +0xE1D2 0x75C3 +0xE1D3 0x75B5 +0xE1D4 0x75BD +0xE1D5 0x75B8 +0xE1D6 0x75BC +0xE1D7 0x75B1 +0xE1D8 0x75CD +0xE1D9 0x75CA +0xE1DA 0x75D2 +0xE1DB 0x75D9 +0xE1DC 0x75E3 +0xE1DD 0x75DE +0xE1DE 0x75FE +0xE1DF 0x75FF +0xE1E0 0x75FC +0xE1E1 0x7601 +0xE1E2 0x75F0 +0xE1E3 0x75FA +0xE1E4 0x75F2 +0xE1E5 0x75F3 +0xE1E6 0x760B +0xE1E7 0x760D +0xE1E8 0x7609 +0xE1E9 0x761F +0xE1EA 0x7627 +0xE1EB 0x7620 +0xE1EC 0x7621 +0xE1ED 0x7622 +0xE1EE 0x7624 +0xE1EF 0x7634 +0xE1F0 0x7630 +0xE1F1 0x763B +0xE1F2 0x7647 +0xE1F3 0x7648 +0xE1F4 0x7646 +0xE1F5 0x765C +0xE1F6 0x7658 +0xE1F7 0x7661 +0xE1F8 0x7662 +0xE1F9 0x7668 +0xE1FA 0x7669 +0xE1FB 0x766A +0xE1FC 0x7667 +0xE1FD 0x766C +0xE1FE 0x7670 +0xE2A1 0x7672 +0xE2A2 0x7676 +0xE2A3 0x7678 +0xE2A4 0x767C +0xE2A5 0x7680 +0xE2A6 0x7683 +0xE2A7 0x7688 +0xE2A8 0x768B +0xE2A9 0x768E +0xE2AA 0x7696 +0xE2AB 0x7693 +0xE2AC 0x7699 +0xE2AD 0x769A +0xE2AE 0x76B0 +0xE2AF 0x76B4 +0xE2B0 0x76B8 +0xE2B1 0x76B9 +0xE2B2 0x76BA +0xE2B3 0x76C2 +0xE2B4 0x76CD +0xE2B5 0x76D6 +0xE2B6 0x76D2 +0xE2B7 0x76DE +0xE2B8 0x76E1 +0xE2B9 0x76E5 +0xE2BA 0x76E7 +0xE2BB 0x76EA +0xE2BC 0x862F +0xE2BD 0x76FB +0xE2BE 0x7708 +0xE2BF 0x7707 +0xE2C0 0x7704 +0xE2C1 0x7729 +0xE2C2 0x7724 +0xE2C3 0x771E +0xE2C4 0x7725 +0xE2C5 0x7726 +0xE2C6 0x771B +0xE2C7 0x7737 +0xE2C8 0x7738 +0xE2C9 0x7747 +0xE2CA 0x775A +0xE2CB 0x7768 +0xE2CC 0x776B +0xE2CD 0x775B +0xE2CE 0x7765 +0xE2CF 0x777F +0xE2D0 0x777E +0xE2D1 0x7779 +0xE2D2 0x778E +0xE2D3 0x778B +0xE2D4 0x7791 +0xE2D5 0x77A0 +0xE2D6 0x779E +0xE2D7 0x77B0 +0xE2D8 0x77B6 +0xE2D9 0x77B9 +0xE2DA 0x77BF +0xE2DB 0x77BC +0xE2DC 0x77BD +0xE2DD 0x77BB +0xE2DE 0x77C7 +0xE2DF 0x77CD +0xE2E0 0x77D7 +0xE2E1 0x77DA +0xE2E2 0x77DC +0xE2E3 0x77E3 +0xE2E4 0x77EE +0xE2E5 0x77FC +0xE2E6 0x780C +0xE2E7 0x7812 +0xE2E8 0x7926 +0xE2E9 0x7820 +0xE2EA 0x792A +0xE2EB 0x7845 +0xE2EC 0x788E +0xE2ED 0x7874 +0xE2EE 0x7886 +0xE2EF 0x787C +0xE2F0 0x789A +0xE2F1 0x788C +0xE2F2 0x78A3 +0xE2F3 0x78B5 +0xE2F4 0x78AA +0xE2F5 0x78AF +0xE2F6 0x78D1 +0xE2F7 0x78C6 +0xE2F8 0x78CB +0xE2F9 0x78D4 +0xE2FA 0x78BE +0xE2FB 0x78BC +0xE2FC 0x78C5 +0xE2FD 0x78CA +0xE2FE 0x78EC +0xE3A1 0x78E7 +0xE3A2 0x78DA +0xE3A3 0x78FD +0xE3A4 0x78F4 +0xE3A5 0x7907 +0xE3A6 0x7912 +0xE3A7 0x7911 +0xE3A8 0x7919 +0xE3A9 0x792C +0xE3AA 0x792B +0xE3AB 0x7940 +0xE3AC 0x7960 +0xE3AD 0x7957 +0xE3AE 0x795F +0xE3AF 0x795A +0xE3B0 0x7955 +0xE3B1 0x7953 +0xE3B2 0x797A +0xE3B3 0x797F +0xE3B4 0x798A +0xE3B5 0x799D +0xE3B6 0x79A7 +0xE3B7 0x9F4B +0xE3B8 0x79AA +0xE3B9 0x79AE +0xE3BA 0x79B3 +0xE3BB 0x79B9 +0xE3BC 0x79BA +0xE3BD 0x79C9 +0xE3BE 0x79D5 +0xE3BF 0x79E7 +0xE3C0 0x79EC +0xE3C1 0x79E1 +0xE3C2 0x79E3 +0xE3C3 0x7A08 +0xE3C4 0x7A0D +0xE3C5 0x7A18 +0xE3C6 0x7A19 +0xE3C7 0x7A20 +0xE3C8 0x7A1F +0xE3C9 0x7980 +0xE3CA 0x7A31 +0xE3CB 0x7A3B +0xE3CC 0x7A3E +0xE3CD 0x7A37 +0xE3CE 0x7A43 +0xE3CF 0x7A57 +0xE3D0 0x7A49 +0xE3D1 0x7A61 +0xE3D2 0x7A62 +0xE3D3 0x7A69 +0xE3D4 0x9F9D +0xE3D5 0x7A70 +0xE3D6 0x7A79 +0xE3D7 0x7A7D +0xE3D8 0x7A88 +0xE3D9 0x7A97 +0xE3DA 0x7A95 +0xE3DB 0x7A98 +0xE3DC 0x7A96 +0xE3DD 0x7AA9 +0xE3DE 0x7AC8 +0xE3DF 0x7AB0 +0xE3E0 0x7AB6 +0xE3E1 0x7AC5 +0xE3E2 0x7AC4 +0xE3E3 0x7ABF +0xE3E4 0x9083 +0xE3E5 0x7AC7 +0xE3E6 0x7ACA +0xE3E7 0x7ACD +0xE3E8 0x7ACF +0xE3E9 0x7AD5 +0xE3EA 0x7AD3 +0xE3EB 0x7AD9 +0xE3EC 0x7ADA +0xE3ED 0x7ADD +0xE3EE 0x7AE1 +0xE3EF 0x7AE2 +0xE3F0 0x7AE6 +0xE3F1 0x7AED +0xE3F2 0x7AF0 +0xE3F3 0x7B02 +0xE3F4 0x7B0F +0xE3F5 0x7B0A +0xE3F6 0x7B06 +0xE3F7 0x7B33 +0xE3F8 0x7B18 +0xE3F9 0x7B19 +0xE3FA 0x7B1E +0xE3FB 0x7B35 +0xE3FC 0x7B28 +0xE3FD 0x7B36 +0xE3FE 0x7B50 +0xE4A1 0x7B7A +0xE4A2 0x7B04 +0xE4A3 0x7B4D +0xE4A4 0x7B0B +0xE4A5 0x7B4C +0xE4A6 0x7B45 +0xE4A7 0x7B75 +0xE4A8 0x7B65 +0xE4A9 0x7B74 +0xE4AA 0x7B67 +0xE4AB 0x7B70 +0xE4AC 0x7B71 +0xE4AD 0x7B6C +0xE4AE 0x7B6E +0xE4AF 0x7B9D +0xE4B0 0x7B98 +0xE4B1 0x7B9F +0xE4B2 0x7B8D +0xE4B3 0x7B9C +0xE4B4 0x7B9A +0xE4B5 0x7B8B +0xE4B6 0x7B92 +0xE4B7 0x7B8F +0xE4B8 0x7B5D +0xE4B9 0x7B99 +0xE4BA 0x7BCB +0xE4BB 0x7BC1 +0xE4BC 0x7BCC +0xE4BD 0x7BCF +0xE4BE 0x7BB4 +0xE4BF 0x7BC6 +0xE4C0 0x7BDD +0xE4C1 0x7BE9 +0xE4C2 0x7C11 +0xE4C3 0x7C14 +0xE4C4 0x7BE6 +0xE4C5 0x7BE5 +0xE4C6 0x7C60 +0xE4C7 0x7C00 +0xE4C8 0x7C07 +0xE4C9 0x7C13 +0xE4CA 0x7BF3 +0xE4CB 0x7BF7 +0xE4CC 0x7C17 +0xE4CD 0x7C0D +0xE4CE 0x7BF6 +0xE4CF 0x7C23 +0xE4D0 0x7C27 +0xE4D1 0x7C2A +0xE4D2 0x7C1F +0xE4D3 0x7C37 +0xE4D4 0x7C2B +0xE4D5 0x7C3D +0xE4D6 0x7C4C +0xE4D7 0x7C43 +0xE4D8 0x7C54 +0xE4D9 0x7C4F +0xE4DA 0x7C40 +0xE4DB 0x7C50 +0xE4DC 0x7C58 +0xE4DD 0x7C5F +0xE4DE 0x7C64 +0xE4DF 0x7C56 +0xE4E0 0x7C65 +0xE4E1 0x7C6C +0xE4E2 0x7C75 +0xE4E3 0x7C83 +0xE4E4 0x7C90 +0xE4E5 0x7CA4 +0xE4E6 0x7CAD +0xE4E7 0x7CA2 +0xE4E8 0x7CAB +0xE4E9 0x7CA1 +0xE4EA 0x7CA8 +0xE4EB 0x7CB3 +0xE4EC 0x7CB2 +0xE4ED 0x7CB1 +0xE4EE 0x7CAE +0xE4EF 0x7CB9 +0xE4F0 0x7CBD +0xE4F1 0x7CC0 +0xE4F2 0x7CC5 +0xE4F3 0x7CC2 +0xE4F4 0x7CD8 +0xE4F5 0x7CD2 +0xE4F6 0x7CDC +0xE4F7 0x7CE2 +0xE4F8 0x9B3B +0xE4F9 0x7CEF +0xE4FA 0x7CF2 +0xE4FB 0x7CF4 +0xE4FC 0x7CF6 +0xE4FD 0x7CFA +0xE4FE 0x7D06 +0xE5A1 0x7D02 +0xE5A2 0x7D1C +0xE5A3 0x7D15 +0xE5A4 0x7D0A +0xE5A5 0x7D45 +0xE5A6 0x7D4B +0xE5A7 0x7D2E +0xE5A8 0x7D32 +0xE5A9 0x7D3F +0xE5AA 0x7D35 +0xE5AB 0x7D46 +0xE5AC 0x7D73 +0xE5AD 0x7D56 +0xE5AE 0x7D4E +0xE5AF 0x7D72 +0xE5B0 0x7D68 +0xE5B1 0x7D6E +0xE5B2 0x7D4F +0xE5B3 0x7D63 +0xE5B4 0x7D93 +0xE5B5 0x7D89 +0xE5B6 0x7D5B +0xE5B7 0x7D8F +0xE5B8 0x7D7D +0xE5B9 0x7D9B +0xE5BA 0x7DBA +0xE5BB 0x7DAE +0xE5BC 0x7DA3 +0xE5BD 0x7DB5 +0xE5BE 0x7DC7 +0xE5BF 0x7DBD +0xE5C0 0x7DAB +0xE5C1 0x7E3D +0xE5C2 0x7DA2 +0xE5C3 0x7DAF +0xE5C4 0x7DDC +0xE5C5 0x7DB8 +0xE5C6 0x7D9F +0xE5C7 0x7DB0 +0xE5C8 0x7DD8 +0xE5C9 0x7DDD +0xE5CA 0x7DE4 +0xE5CB 0x7DDE +0xE5CC 0x7DFB +0xE5CD 0x7DF2 +0xE5CE 0x7DE1 +0xE5CF 0x7E05 +0xE5D0 0x7E0A +0xE5D1 0x7E23 +0xE5D2 0x7E21 +0xE5D3 0x7E12 +0xE5D4 0x7E31 +0xE5D5 0x7E1F +0xE5D6 0x7E09 +0xE5D7 0x7E0B +0xE5D8 0x7E22 +0xE5D9 0x7E46 +0xE5DA 0x7E66 +0xE5DB 0x7E3B +0xE5DC 0x7E35 +0xE5DD 0x7E39 +0xE5DE 0x7E43 +0xE5DF 0x7E37 +0xE5E0 0x7E32 +0xE5E1 0x7E3A +0xE5E2 0x7E67 +0xE5E3 0x7E5D +0xE5E4 0x7E56 +0xE5E5 0x7E5E +0xE5E6 0x7E59 +0xE5E7 0x7E5A +0xE5E8 0x7E79 +0xE5E9 0x7E6A +0xE5EA 0x7E69 +0xE5EB 0x7E7C +0xE5EC 0x7E7B +0xE5ED 0x7E83 +0xE5EE 0x7DD5 +0xE5EF 0x7E7D +0xE5F0 0x8FAE +0xE5F1 0x7E7F +0xE5F2 0x7E88 +0xE5F3 0x7E89 +0xE5F4 0x7E8C +0xE5F5 0x7E92 +0xE5F6 0x7E90 +0xE5F7 0x7E93 +0xE5F8 0x7E94 +0xE5F9 0x7E96 +0xE5FA 0x7E8E +0xE5FB 0x7E9B +0xE5FC 0x7E9C +0xE5FD 0x7F38 +0xE5FE 0x7F3A +0xE6A1 0x7F45 +0xE6A2 0x7F4C +0xE6A3 0x7F4D +0xE6A4 0x7F4E +0xE6A5 0x7F50 +0xE6A6 0x7F51 +0xE6A7 0x7F55 +0xE6A8 0x7F54 +0xE6A9 0x7F58 +0xE6AA 0x7F5F +0xE6AB 0x7F60 +0xE6AC 0x7F68 +0xE6AD 0x7F69 +0xE6AE 0x7F67 +0xE6AF 0x7F78 +0xE6B0 0x7F82 +0xE6B1 0x7F86 +0xE6B2 0x7F83 +0xE6B3 0x7F88 +0xE6B4 0x7F87 +0xE6B5 0x7F8C +0xE6B6 0x7F94 +0xE6B7 0x7F9E +0xE6B8 0x7F9D +0xE6B9 0x7F9A +0xE6BA 0x7FA3 +0xE6BB 0x7FAF +0xE6BC 0x7FB2 +0xE6BD 0x7FB9 +0xE6BE 0x7FAE +0xE6BF 0x7FB6 +0xE6C0 0x7FB8 +0xE6C1 0x8B71 +0xE6C2 0x7FC5 +0xE6C3 0x7FC6 +0xE6C4 0x7FCA +0xE6C5 0x7FD5 +0xE6C6 0x7FD4 +0xE6C7 0x7FE1 +0xE6C8 0x7FE6 +0xE6C9 0x7FE9 +0xE6CA 0x7FF3 +0xE6CB 0x7FF9 +0xE6CC 0x98DC +0xE6CD 0x8006 +0xE6CE 0x8004 +0xE6CF 0x800B +0xE6D0 0x8012 +0xE6D1 0x8018 +0xE6D2 0x8019 +0xE6D3 0x801C +0xE6D4 0x8021 +0xE6D5 0x8028 +0xE6D6 0x803F +0xE6D7 0x803B +0xE6D8 0x804A +0xE6D9 0x8046 +0xE6DA 0x8052 +0xE6DB 0x8058 +0xE6DC 0x805A +0xE6DD 0x805F +0xE6DE 0x8062 +0xE6DF 0x8068 +0xE6E0 0x8073 +0xE6E1 0x8072 +0xE6E2 0x8070 +0xE6E3 0x8076 +0xE6E4 0x8079 +0xE6E5 0x807D +0xE6E6 0x807F +0xE6E7 0x8084 +0xE6E8 0x8086 +0xE6E9 0x8085 +0xE6EA 0x809B +0xE6EB 0x8093 +0xE6EC 0x809A +0xE6ED 0x80AD +0xE6EE 0x5190 +0xE6EF 0x80AC +0xE6F0 0x80DB +0xE6F1 0x80E5 +0xE6F2 0x80D9 +0xE6F3 0x80DD +0xE6F4 0x80C4 +0xE6F5 0x80DA +0xE6F6 0x80D6 +0xE6F7 0x8109 +0xE6F8 0x80EF +0xE6F9 0x80F1 +0xE6FA 0x811B +0xE6FB 0x8129 +0xE6FC 0x8123 +0xE6FD 0x812F +0xE6FE 0x814B +0xE7A1 0x968B +0xE7A2 0x8146 +0xE7A3 0x813E +0xE7A4 0x8153 +0xE7A5 0x8151 +0xE7A6 0x80FC +0xE7A7 0x8171 +0xE7A8 0x816E +0xE7A9 0x8165 +0xE7AA 0x8166 +0xE7AB 0x8174 +0xE7AC 0x8183 +0xE7AD 0x8188 +0xE7AE 0x818A +0xE7AF 0x8180 +0xE7B0 0x8182 +0xE7B1 0x81A0 +0xE7B2 0x8195 +0xE7B3 0x81A4 +0xE7B4 0x81A3 +0xE7B5 0x815F +0xE7B6 0x8193 +0xE7B7 0x81A9 +0xE7B8 0x81B0 +0xE7B9 0x81B5 +0xE7BA 0x81BE +0xE7BB 0x81B8 +0xE7BC 0x81BD +0xE7BD 0x81C0 +0xE7BE 0x81C2 +0xE7BF 0x81BA +0xE7C0 0x81C9 +0xE7C1 0x81CD +0xE7C2 0x81D1 +0xE7C3 0x81D9 +0xE7C4 0x81D8 +0xE7C5 0x81C8 +0xE7C6 0x81DA +0xE7C7 0x81DF +0xE7C8 0x81E0 +0xE7C9 0x81E7 +0xE7CA 0x81FA +0xE7CB 0x81FB +0xE7CC 0x81FE +0xE7CD 0x8201 +0xE7CE 0x8202 +0xE7CF 0x8205 +0xE7D0 0x8207 +0xE7D1 0x820A +0xE7D2 0x820D +0xE7D3 0x8210 +0xE7D4 0x8216 +0xE7D5 0x8229 +0xE7D6 0x822B +0xE7D7 0x8238 +0xE7D8 0x8233 +0xE7D9 0x8240 +0xE7DA 0x8259 +0xE7DB 0x8258 +0xE7DC 0x825D +0xE7DD 0x825A +0xE7DE 0x825F +0xE7DF 0x8264 +0xE7E0 0x8262 +0xE7E1 0x8268 +0xE7E2 0x826A +0xE7E3 0x826B +0xE7E4 0x822E +0xE7E5 0x8271 +0xE7E6 0x8277 +0xE7E7 0x8278 +0xE7E8 0x827E +0xE7E9 0x828D +0xE7EA 0x8292 +0xE7EB 0x82AB +0xE7EC 0x829F +0xE7ED 0x82BB +0xE7EE 0x82AC +0xE7EF 0x82E1 +0xE7F0 0x82E3 +0xE7F1 0x82DF +0xE7F2 0x82D2 +0xE7F3 0x82F4 +0xE7F4 0x82F3 +0xE7F5 0x82FA +0xE7F6 0x8393 +0xE7F7 0x8303 +0xE7F8 0x82FB +0xE7F9 0x82F9 +0xE7FA 0x82DE +0xE7FB 0x8306 +0xE7FC 0x82DC +0xE7FD 0x8309 +0xE7FE 0x82D9 +0xE8A1 0x8335 +0xE8A2 0x8334 +0xE8A3 0x8316 +0xE8A4 0x8332 +0xE8A5 0x8331 +0xE8A6 0x8340 +0xE8A7 0x8339 +0xE8A8 0x8350 +0xE8A9 0x8345 +0xE8AA 0x832F +0xE8AB 0x832B +0xE8AC 0x8317 +0xE8AD 0x8318 +0xE8AE 0x8385 +0xE8AF 0x839A +0xE8B0 0x83AA +0xE8B1 0x839F +0xE8B2 0x83A2 +0xE8B3 0x8396 +0xE8B4 0x8323 +0xE8B5 0x838E +0xE8B6 0x8387 +0xE8B7 0x838A +0xE8B8 0x837C +0xE8B9 0x83B5 +0xE8BA 0x8373 +0xE8BB 0x8375 +0xE8BC 0x83A0 +0xE8BD 0x8389 +0xE8BE 0x83A8 +0xE8BF 0x83F4 +0xE8C0 0x8413 +0xE8C1 0x83EB +0xE8C2 0x83CE +0xE8C3 0x83FD +0xE8C4 0x8403 +0xE8C5 0x83D8 +0xE8C6 0x840B +0xE8C7 0x83C1 +0xE8C8 0x83F7 +0xE8C9 0x8407 +0xE8CA 0x83E0 +0xE8CB 0x83F2 +0xE8CC 0x840D +0xE8CD 0x8422 +0xE8CE 0x8420 +0xE8CF 0x83BD +0xE8D0 0x8438 +0xE8D1 0x8506 +0xE8D2 0x83FB +0xE8D3 0x846D +0xE8D4 0x842A +0xE8D5 0x843C +0xE8D6 0x855A +0xE8D7 0x8484 +0xE8D8 0x8477 +0xE8D9 0x846B +0xE8DA 0x84AD +0xE8DB 0x846E +0xE8DC 0x8482 +0xE8DD 0x8469 +0xE8DE 0x8446 +0xE8DF 0x842C +0xE8E0 0x846F +0xE8E1 0x8479 +0xE8E2 0x8435 +0xE8E3 0x84CA +0xE8E4 0x8462 +0xE8E5 0x84B9 +0xE8E6 0x84BF +0xE8E7 0x849F +0xE8E8 0x84D9 +0xE8E9 0x84CD +0xE8EA 0x84BB +0xE8EB 0x84DA +0xE8EC 0x84D0 +0xE8ED 0x84C1 +0xE8EE 0x84C6 +0xE8EF 0x84D6 +0xE8F0 0x84A1 +0xE8F1 0x8521 +0xE8F2 0x84FF +0xE8F3 0x84F4 +0xE8F4 0x8517 +0xE8F5 0x8518 +0xE8F6 0x852C +0xE8F7 0x851F +0xE8F8 0x8515 +0xE8F9 0x8514 +0xE8FA 0x84FC +0xE8FB 0x8540 +0xE8FC 0x8563 +0xE8FD 0x8558 +0xE8FE 0x8548 +0xE9A1 0x8541 +0xE9A2 0x8602 +0xE9A3 0x854B +0xE9A4 0x8555 +0xE9A5 0x8580 +0xE9A6 0x85A4 +0xE9A7 0x8588 +0xE9A8 0x8591 +0xE9A9 0x858A +0xE9AA 0x85A8 +0xE9AB 0x856D +0xE9AC 0x8594 +0xE9AD 0x859B +0xE9AE 0x85EA +0xE9AF 0x8587 +0xE9B0 0x859C +0xE9B1 0x8577 +0xE9B2 0x857E +0xE9B3 0x8590 +0xE9B4 0x85C9 +0xE9B5 0x85BA +0xE9B6 0x85CF +0xE9B7 0x85B9 +0xE9B8 0x85D0 +0xE9B9 0x85D5 +0xE9BA 0x85DD +0xE9BB 0x85E5 +0xE9BC 0x85DC +0xE9BD 0x85F9 +0xE9BE 0x860A +0xE9BF 0x8613 +0xE9C0 0x860B +0xE9C1 0x85FE +0xE9C2 0x85FA +0xE9C3 0x8606 +0xE9C4 0x8622 +0xE9C5 0x861A +0xE9C6 0x8630 +0xE9C7 0x863F +0xE9C8 0x864D +0xE9C9 0x4E55 +0xE9CA 0x8654 +0xE9CB 0x865F +0xE9CC 0x8667 +0xE9CD 0x8671 +0xE9CE 0x8693 +0xE9CF 0x86A3 +0xE9D0 0x86A9 +0xE9D1 0x86AA +0xE9D2 0x868B +0xE9D3 0x868C +0xE9D4 0x86B6 +0xE9D5 0x86AF +0xE9D6 0x86C4 +0xE9D7 0x86C6 +0xE9D8 0x86B0 +0xE9D9 0x86C9 +0xE9DA 0x8823 +0xE9DB 0x86AB +0xE9DC 0x86D4 +0xE9DD 0x86DE +0xE9DE 0x86E9 +0xE9DF 0x86EC +0xE9E0 0x86DF +0xE9E1 0x86DB +0xE9E2 0x86EF +0xE9E3 0x8712 +0xE9E4 0x8706 +0xE9E5 0x8708 +0xE9E6 0x8700 +0xE9E7 0x8703 +0xE9E8 0x86FB +0xE9E9 0x8711 +0xE9EA 0x8709 +0xE9EB 0x870D +0xE9EC 0x86F9 +0xE9ED 0x870A +0xE9EE 0x8734 +0xE9EF 0x873F +0xE9F0 0x8737 +0xE9F1 0x873B +0xE9F2 0x8725 +0xE9F3 0x8729 +0xE9F4 0x871A +0xE9F5 0x8760 +0xE9F6 0x875F +0xE9F7 0x8778 +0xE9F8 0x874C +0xE9F9 0x874E +0xE9FA 0x8774 +0xE9FB 0x8757 +0xE9FC 0x8768 +0xE9FD 0x876E +0xE9FE 0x8759 +0xEAA1 0x8753 +0xEAA2 0x8763 +0xEAA3 0x876A +0xEAA4 0x8805 +0xEAA5 0x87A2 +0xEAA6 0x879F +0xEAA7 0x8782 +0xEAA8 0x87AF +0xEAA9 0x87CB +0xEAAA 0x87BD +0xEAAB 0x87C0 +0xEAAC 0x87D0 +0xEAAD 0x96D6 +0xEAAE 0x87AB +0xEAAF 0x87C4 +0xEAB0 0x87B3 +0xEAB1 0x87C7 +0xEAB2 0x87C6 +0xEAB3 0x87BB +0xEAB4 0x87EF +0xEAB5 0x87F2 +0xEAB6 0x87E0 +0xEAB7 0x880F +0xEAB8 0x880D +0xEAB9 0x87FE +0xEABA 0x87F6 +0xEABB 0x87F7 +0xEABC 0x880E +0xEABD 0x87D2 +0xEABE 0x8811 +0xEABF 0x8816 +0xEAC0 0x8815 +0xEAC1 0x8822 +0xEAC2 0x8821 +0xEAC3 0x8831 +0xEAC4 0x8836 +0xEAC5 0x8839 +0xEAC6 0x8827 +0xEAC7 0x883B +0xEAC8 0x8844 +0xEAC9 0x8842 +0xEACA 0x8852 +0xEACB 0x8859 +0xEACC 0x885E +0xEACD 0x8862 +0xEACE 0x886B +0xEACF 0x8881 +0xEAD0 0x887E +0xEAD1 0x889E +0xEAD2 0x8875 +0xEAD3 0x887D +0xEAD4 0x88B5 +0xEAD5 0x8872 +0xEAD6 0x8882 +0xEAD7 0x8897 +0xEAD8 0x8892 +0xEAD9 0x88AE +0xEADA 0x8899 +0xEADB 0x88A2 +0xEADC 0x888D +0xEADD 0x88A4 +0xEADE 0x88B0 +0xEADF 0x88BF +0xEAE0 0x88B1 +0xEAE1 0x88C3 +0xEAE2 0x88C4 +0xEAE3 0x88D4 +0xEAE4 0x88D8 +0xEAE5 0x88D9 +0xEAE6 0x88DD +0xEAE7 0x88F9 +0xEAE8 0x8902 +0xEAE9 0x88FC +0xEAEA 0x88F4 +0xEAEB 0x88E8 +0xEAEC 0x88F2 +0xEAED 0x8904 +0xEAEE 0x890C +0xEAEF 0x890A +0xEAF0 0x8913 +0xEAF1 0x8943 +0xEAF2 0x891E +0xEAF3 0x8925 +0xEAF4 0x892A +0xEAF5 0x892B +0xEAF6 0x8941 +0xEAF7 0x8944 +0xEAF8 0x893B +0xEAF9 0x8936 +0xEAFA 0x8938 +0xEAFB 0x894C +0xEAFC 0x891D +0xEAFD 0x8960 +0xEAFE 0x895E +0xEBA1 0x8966 +0xEBA2 0x8964 +0xEBA3 0x896D +0xEBA4 0x896A +0xEBA5 0x896F +0xEBA6 0x8974 +0xEBA7 0x8977 +0xEBA8 0x897E +0xEBA9 0x8983 +0xEBAA 0x8988 +0xEBAB 0x898A +0xEBAC 0x8993 +0xEBAD 0x8998 +0xEBAE 0x89A1 +0xEBAF 0x89A9 +0xEBB0 0x89A6 +0xEBB1 0x89AC +0xEBB2 0x89AF +0xEBB3 0x89B2 +0xEBB4 0x89BA +0xEBB5 0x89BD +0xEBB6 0x89BF +0xEBB7 0x89C0 +0xEBB8 0x89DA +0xEBB9 0x89DC +0xEBBA 0x89DD +0xEBBB 0x89E7 +0xEBBC 0x89F4 +0xEBBD 0x89F8 +0xEBBE 0x8A03 +0xEBBF 0x8A16 +0xEBC0 0x8A10 +0xEBC1 0x8A0C +0xEBC2 0x8A1B +0xEBC3 0x8A1D +0xEBC4 0x8A25 +0xEBC5 0x8A36 +0xEBC6 0x8A41 +0xEBC7 0x8A5B +0xEBC8 0x8A52 +0xEBC9 0x8A46 +0xEBCA 0x8A48 +0xEBCB 0x8A7C +0xEBCC 0x8A6D +0xEBCD 0x8A6C +0xEBCE 0x8A62 +0xEBCF 0x8A85 +0xEBD0 0x8A82 +0xEBD1 0x8A84 +0xEBD2 0x8AA8 +0xEBD3 0x8AA1 +0xEBD4 0x8A91 +0xEBD5 0x8AA5 +0xEBD6 0x8AA6 +0xEBD7 0x8A9A +0xEBD8 0x8AA3 +0xEBD9 0x8AC4 +0xEBDA 0x8ACD +0xEBDB 0x8AC2 +0xEBDC 0x8ADA +0xEBDD 0x8AEB +0xEBDE 0x8AF3 +0xEBDF 0x8AE7 +0xEBE0 0x8AE4 +0xEBE1 0x8AF1 +0xEBE2 0x8B14 +0xEBE3 0x8AE0 +0xEBE4 0x8AE2 +0xEBE5 0x8AF7 +0xEBE6 0x8ADE +0xEBE7 0x8ADB +0xEBE8 0x8B0C +0xEBE9 0x8B07 +0xEBEA 0x8B1A +0xEBEB 0x8AE1 +0xEBEC 0x8B16 +0xEBED 0x8B10 +0xEBEE 0x8B17 +0xEBEF 0x8B20 +0xEBF0 0x8B33 +0xEBF1 0x97AB +0xEBF2 0x8B26 +0xEBF3 0x8B2B +0xEBF4 0x8B3E +0xEBF5 0x8B28 +0xEBF6 0x8B41 +0xEBF7 0x8B4C +0xEBF8 0x8B4F +0xEBF9 0x8B4E +0xEBFA 0x8B49 +0xEBFB 0x8B56 +0xEBFC 0x8B5B +0xEBFD 0x8B5A +0xEBFE 0x8B6B +0xECA1 0x8B5F +0xECA2 0x8B6C +0xECA3 0x8B6F +0xECA4 0x8B74 +0xECA5 0x8B7D +0xECA6 0x8B80 +0xECA7 0x8B8C +0xECA8 0x8B8E +0xECA9 0x8B92 +0xECAA 0x8B93 +0xECAB 0x8B96 +0xECAC 0x8B99 +0xECAD 0x8B9A +0xECAE 0x8C3A +0xECAF 0x8C41 +0xECB0 0x8C3F +0xECB1 0x8C48 +0xECB2 0x8C4C +0xECB3 0x8C4E +0xECB4 0x8C50 +0xECB5 0x8C55 +0xECB6 0x8C62 +0xECB7 0x8C6C +0xECB8 0x8C78 +0xECB9 0x8C7A +0xECBA 0x8C82 +0xECBB 0x8C89 +0xECBC 0x8C85 +0xECBD 0x8C8A +0xECBE 0x8C8D +0xECBF 0x8C8E +0xECC0 0x8C94 +0xECC1 0x8C7C +0xECC2 0x8C98 +0xECC3 0x621D +0xECC4 0x8CAD +0xECC5 0x8CAA +0xECC6 0x8CBD +0xECC7 0x8CB2 +0xECC8 0x8CB3 +0xECC9 0x8CAE +0xECCA 0x8CB6 +0xECCB 0x8CC8 +0xECCC 0x8CC1 +0xECCD 0x8CE4 +0xECCE 0x8CE3 +0xECCF 0x8CDA +0xECD0 0x8CFD +0xECD1 0x8CFA +0xECD2 0x8CFB +0xECD3 0x8D04 +0xECD4 0x8D05 +0xECD5 0x8D0A +0xECD6 0x8D07 +0xECD7 0x8D0F +0xECD8 0x8D0D +0xECD9 0x8D10 +0xECDA 0x9F4E +0xECDB 0x8D13 +0xECDC 0x8CCD +0xECDD 0x8D14 +0xECDE 0x8D16 +0xECDF 0x8D67 +0xECE0 0x8D6D +0xECE1 0x8D71 +0xECE2 0x8D73 +0xECE3 0x8D81 +0xECE4 0x8D99 +0xECE5 0x8DC2 +0xECE6 0x8DBE +0xECE7 0x8DBA +0xECE8 0x8DCF +0xECE9 0x8DDA +0xECEA 0x8DD6 +0xECEB 0x8DCC +0xECEC 0x8DDB +0xECED 0x8DCB +0xECEE 0x8DEA +0xECEF 0x8DEB +0xECF0 0x8DDF +0xECF1 0x8DE3 +0xECF2 0x8DFC +0xECF3 0x8E08 +0xECF4 0x8E09 +0xECF5 0x8DFF +0xECF6 0x8E1D +0xECF7 0x8E1E +0xECF8 0x8E10 +0xECF9 0x8E1F +0xECFA 0x8E42 +0xECFB 0x8E35 +0xECFC 0x8E30 +0xECFD 0x8E34 +0xECFE 0x8E4A +0xEDA1 0x8E47 +0xEDA2 0x8E49 +0xEDA3 0x8E4C +0xEDA4 0x8E50 +0xEDA5 0x8E48 +0xEDA6 0x8E59 +0xEDA7 0x8E64 +0xEDA8 0x8E60 +0xEDA9 0x8E2A +0xEDAA 0x8E63 +0xEDAB 0x8E55 +0xEDAC 0x8E76 +0xEDAD 0x8E72 +0xEDAE 0x8E7C +0xEDAF 0x8E81 +0xEDB0 0x8E87 +0xEDB1 0x8E85 +0xEDB2 0x8E84 +0xEDB3 0x8E8B +0xEDB4 0x8E8A +0xEDB5 0x8E93 +0xEDB6 0x8E91 +0xEDB7 0x8E94 +0xEDB8 0x8E99 +0xEDB9 0x8EAA +0xEDBA 0x8EA1 +0xEDBB 0x8EAC +0xEDBC 0x8EB0 +0xEDBD 0x8EC6 +0xEDBE 0x8EB1 +0xEDBF 0x8EBE +0xEDC0 0x8EC5 +0xEDC1 0x8EC8 +0xEDC2 0x8ECB +0xEDC3 0x8EDB +0xEDC4 0x8EE3 +0xEDC5 0x8EFC +0xEDC6 0x8EFB +0xEDC7 0x8EEB +0xEDC8 0x8EFE +0xEDC9 0x8F0A +0xEDCA 0x8F05 +0xEDCB 0x8F15 +0xEDCC 0x8F12 +0xEDCD 0x8F19 +0xEDCE 0x8F13 +0xEDCF 0x8F1C +0xEDD0 0x8F1F +0xEDD1 0x8F1B +0xEDD2 0x8F0C +0xEDD3 0x8F26 +0xEDD4 0x8F33 +0xEDD5 0x8F3B +0xEDD6 0x8F39 +0xEDD7 0x8F45 +0xEDD8 0x8F42 +0xEDD9 0x8F3E +0xEDDA 0x8F4C +0xEDDB 0x8F49 +0xEDDC 0x8F46 +0xEDDD 0x8F4E +0xEDDE 0x8F57 +0xEDDF 0x8F5C +0xEDE0 0x8F62 +0xEDE1 0x8F63 +0xEDE2 0x8F64 +0xEDE3 0x8F9C +0xEDE4 0x8F9F +0xEDE5 0x8FA3 +0xEDE6 0x8FAD +0xEDE7 0x8FAF +0xEDE8 0x8FB7 +0xEDE9 0x8FDA +0xEDEA 0x8FE5 +0xEDEB 0x8FE2 +0xEDEC 0x8FEA +0xEDED 0x8FEF +0xEDEE 0x9087 +0xEDEF 0x8FF4 +0xEDF0 0x9005 +0xEDF1 0x8FF9 +0xEDF2 0x8FFA +0xEDF3 0x9011 +0xEDF4 0x9015 +0xEDF5 0x9021 +0xEDF6 0x900D +0xEDF7 0x901E +0xEDF8 0x9016 +0xEDF9 0x900B +0xEDFA 0x9027 +0xEDFB 0x9036 +0xEDFC 0x9035 +0xEDFD 0x9039 +0xEDFE 0x8FF8 +0xEEA1 0x904F +0xEEA2 0x9050 +0xEEA3 0x9051 +0xEEA4 0x9052 +0xEEA5 0x900E +0xEEA6 0x9049 +0xEEA7 0x903E +0xEEA8 0x9056 +0xEEA9 0x9058 +0xEEAA 0x905E +0xEEAB 0x9068 +0xEEAC 0x906F +0xEEAD 0x9076 +0xEEAE 0x96A8 +0xEEAF 0x9072 +0xEEB0 0x9082 +0xEEB1 0x907D +0xEEB2 0x9081 +0xEEB3 0x9080 +0xEEB4 0x908A +0xEEB5 0x9089 +0xEEB6 0x908F +0xEEB7 0x90A8 +0xEEB8 0x90AF +0xEEB9 0x90B1 +0xEEBA 0x90B5 +0xEEBB 0x90E2 +0xEEBC 0x90E4 +0xEEBD 0x6248 +0xEEBE 0x90DB +0xEEBF 0x9102 +0xEEC0 0x9112 +0xEEC1 0x9119 +0xEEC2 0x9132 +0xEEC3 0x9130 +0xEEC4 0x914A +0xEEC5 0x9156 +0xEEC6 0x9158 +0xEEC7 0x9163 +0xEEC8 0x9165 +0xEEC9 0x9169 +0xEECA 0x9173 +0xEECB 0x9172 +0xEECC 0x918B +0xEECD 0x9189 +0xEECE 0x9182 +0xEECF 0x91A2 +0xEED0 0x91AB +0xEED1 0x91AF +0xEED2 0x91AA +0xEED3 0x91B5 +0xEED4 0x91B4 +0xEED5 0x91BA +0xEED6 0x91C0 +0xEED7 0x91C1 +0xEED8 0x91C9 +0xEED9 0x91CB +0xEEDA 0x91D0 +0xEEDB 0x91D6 +0xEEDC 0x91DF +0xEEDD 0x91E1 +0xEEDE 0x91DB +0xEEDF 0x91FC +0xEEE0 0x91F5 +0xEEE1 0x91F6 +0xEEE2 0x921E +0xEEE3 0x91FF +0xEEE4 0x9214 +0xEEE5 0x922C +0xEEE6 0x9215 +0xEEE7 0x9211 +0xEEE8 0x925E +0xEEE9 0x9257 +0xEEEA 0x9245 +0xEEEB 0x9249 +0xEEEC 0x9264 +0xEEED 0x9248 +0xEEEE 0x9295 +0xEEEF 0x923F +0xEEF0 0x924B +0xEEF1 0x9250 +0xEEF2 0x929C +0xEEF3 0x9296 +0xEEF4 0x9293 +0xEEF5 0x929B +0xEEF6 0x925A +0xEEF7 0x92CF +0xEEF8 0x92B9 +0xEEF9 0x92B7 +0xEEFA 0x92E9 +0xEEFB 0x930F +0xEEFC 0x92FA +0xEEFD 0x9344 +0xEEFE 0x932E +0xEFA1 0x9319 +0xEFA2 0x9322 +0xEFA3 0x931A +0xEFA4 0x9323 +0xEFA5 0x933A +0xEFA6 0x9335 +0xEFA7 0x933B +0xEFA8 0x935C +0xEFA9 0x9360 +0xEFAA 0x937C +0xEFAB 0x936E +0xEFAC 0x9356 +0xEFAD 0x93B0 +0xEFAE 0x93AC +0xEFAF 0x93AD +0xEFB0 0x9394 +0xEFB1 0x93B9 +0xEFB2 0x93D6 +0xEFB3 0x93D7 +0xEFB4 0x93E8 +0xEFB5 0x93E5 +0xEFB6 0x93D8 +0xEFB7 0x93C3 +0xEFB8 0x93DD +0xEFB9 0x93D0 +0xEFBA 0x93C8 +0xEFBB 0x93E4 +0xEFBC 0x941A +0xEFBD 0x9414 +0xEFBE 0x9413 +0xEFBF 0x9403 +0xEFC0 0x9407 +0xEFC1 0x9410 +0xEFC2 0x9436 +0xEFC3 0x942B +0xEFC4 0x9435 +0xEFC5 0x9421 +0xEFC6 0x943A +0xEFC7 0x9441 +0xEFC8 0x9452 +0xEFC9 0x9444 +0xEFCA 0x945B +0xEFCB 0x9460 +0xEFCC 0x9462 +0xEFCD 0x945E +0xEFCE 0x946A +0xEFCF 0x9229 +0xEFD0 0x9470 +0xEFD1 0x9475 +0xEFD2 0x9477 +0xEFD3 0x947D +0xEFD4 0x945A +0xEFD5 0x947C +0xEFD6 0x947E +0xEFD7 0x9481 +0xEFD8 0x947F +0xEFD9 0x9582 +0xEFDA 0x9587 +0xEFDB 0x958A +0xEFDC 0x9594 +0xEFDD 0x9596 +0xEFDE 0x9598 +0xEFDF 0x9599 +0xEFE0 0x95A0 +0xEFE1 0x95A8 +0xEFE2 0x95A7 +0xEFE3 0x95AD +0xEFE4 0x95BC +0xEFE5 0x95BB +0xEFE6 0x95B9 +0xEFE7 0x95BE +0xEFE8 0x95CA +0xEFE9 0x6FF6 +0xEFEA 0x95C3 +0xEFEB 0x95CD +0xEFEC 0x95CC +0xEFED 0x95D5 +0xEFEE 0x95D4 +0xEFEF 0x95D6 +0xEFF0 0x95DC +0xEFF1 0x95E1 +0xEFF2 0x95E5 +0xEFF3 0x95E2 +0xEFF4 0x9621 +0xEFF5 0x9628 +0xEFF6 0x962E +0xEFF7 0x962F +0xEFF8 0x9642 +0xEFF9 0x964C +0xEFFA 0x964F +0xEFFB 0x964B +0xEFFC 0x9677 +0xEFFD 0x965C +0xEFFE 0x965E +0xF0A1 0x965D +0xF0A2 0x965F +0xF0A3 0x9666 +0xF0A4 0x9672 +0xF0A5 0x966C +0xF0A6 0x968D +0xF0A7 0x9698 +0xF0A8 0x9695 +0xF0A9 0x9697 +0xF0AA 0x96AA +0xF0AB 0x96A7 +0xF0AC 0x96B1 +0xF0AD 0x96B2 +0xF0AE 0x96B0 +0xF0AF 0x96B4 +0xF0B0 0x96B6 +0xF0B1 0x96B8 +0xF0B2 0x96B9 +0xF0B3 0x96CE +0xF0B4 0x96CB +0xF0B5 0x96C9 +0xF0B6 0x96CD +0xF0B7 0x894D +0xF0B8 0x96DC +0xF0B9 0x970D +0xF0BA 0x96D5 +0xF0BB 0x96F9 +0xF0BC 0x9704 +0xF0BD 0x9706 +0xF0BE 0x9708 +0xF0BF 0x9713 +0xF0C0 0x970E +0xF0C1 0x9711 +0xF0C2 0x970F +0xF0C3 0x9716 +0xF0C4 0x9719 +0xF0C5 0x9724 +0xF0C6 0x972A +0xF0C7 0x9730 +0xF0C8 0x9739 +0xF0C9 0x973D +0xF0CA 0x973E +0xF0CB 0x9744 +0xF0CC 0x9746 +0xF0CD 0x9748 +0xF0CE 0x9742 +0xF0CF 0x9749 +0xF0D0 0x975C +0xF0D1 0x9760 +0xF0D2 0x9764 +0xF0D3 0x9766 +0xF0D4 0x9768 +0xF0D5 0x52D2 +0xF0D6 0x976B +0xF0D7 0x9771 +0xF0D8 0x9779 +0xF0D9 0x9785 +0xF0DA 0x977C +0xF0DB 0x9781 +0xF0DC 0x977A +0xF0DD 0x9786 +0xF0DE 0x978B +0xF0DF 0x978F +0xF0E0 0x9790 +0xF0E1 0x979C +0xF0E2 0x97A8 +0xF0E3 0x97A6 +0xF0E4 0x97A3 +0xF0E5 0x97B3 +0xF0E6 0x97B4 +0xF0E7 0x97C3 +0xF0E8 0x97C6 +0xF0E9 0x97C8 +0xF0EA 0x97CB +0xF0EB 0x97DC +0xF0EC 0x97ED +0xF0ED 0x9F4F +0xF0EE 0x97F2 +0xF0EF 0x7ADF +0xF0F0 0x97F6 +0xF0F1 0x97F5 +0xF0F2 0x980F +0xF0F3 0x980C +0xF0F4 0x9838 +0xF0F5 0x9824 +0xF0F6 0x9821 +0xF0F7 0x9837 +0xF0F8 0x983D +0xF0F9 0x9846 +0xF0FA 0x984F +0xF0FB 0x984B +0xF0FC 0x986B +0xF0FD 0x986F +0xF0FE 0x9870 +0xF1A1 0x9871 +0xF1A2 0x9874 +0xF1A3 0x9873 +0xF1A4 0x98AA +0xF1A5 0x98AF +0xF1A6 0x98B1 +0xF1A7 0x98B6 +0xF1A8 0x98C4 +0xF1A9 0x98C3 +0xF1AA 0x98C6 +0xF1AB 0x98E9 +0xF1AC 0x98EB +0xF1AD 0x9903 +0xF1AE 0x9909 +0xF1AF 0x9912 +0xF1B0 0x9914 +0xF1B1 0x9918 +0xF1B2 0x9921 +0xF1B3 0x991D +0xF1B4 0x991E +0xF1B5 0x9924 +0xF1B6 0x9920 +0xF1B7 0x992C +0xF1B8 0x992E +0xF1B9 0x993D +0xF1BA 0x993E +0xF1BB 0x9942 +0xF1BC 0x9949 +0xF1BD 0x9945 +0xF1BE 0x9950 +0xF1BF 0x994B +0xF1C0 0x9951 +0xF1C1 0x9952 +0xF1C2 0x994C +0xF1C3 0x9955 +0xF1C4 0x9997 +0xF1C5 0x9998 +0xF1C6 0x99A5 +0xF1C7 0x99AD +0xF1C8 0x99AE +0xF1C9 0x99BC +0xF1CA 0x99DF +0xF1CB 0x99DB +0xF1CC 0x99DD +0xF1CD 0x99D8 +0xF1CE 0x99D1 +0xF1CF 0x99ED +0xF1D0 0x99EE +0xF1D1 0x99F1 +0xF1D2 0x99F2 +0xF1D3 0x99FB +0xF1D4 0x99F8 +0xF1D5 0x9A01 +0xF1D6 0x9A0F +0xF1D7 0x9A05 +0xF1D8 0x99E2 +0xF1D9 0x9A19 +0xF1DA 0x9A2B +0xF1DB 0x9A37 +0xF1DC 0x9A45 +0xF1DD 0x9A42 +0xF1DE 0x9A40 +0xF1DF 0x9A43 +0xF1E0 0x9A3E +0xF1E1 0x9A55 +0xF1E2 0x9A4D +0xF1E3 0x9A5B +0xF1E4 0x9A57 +0xF1E5 0x9A5F +0xF1E6 0x9A62 +0xF1E7 0x9A65 +0xF1E8 0x9A64 +0xF1E9 0x9A69 +0xF1EA 0x9A6B +0xF1EB 0x9A6A +0xF1EC 0x9AAD +0xF1ED 0x9AB0 +0xF1EE 0x9ABC +0xF1EF 0x9AC0 +0xF1F0 0x9ACF +0xF1F1 0x9AD1 +0xF1F2 0x9AD3 +0xF1F3 0x9AD4 +0xF1F4 0x9ADE +0xF1F5 0x9ADF +0xF1F6 0x9AE2 +0xF1F7 0x9AE3 +0xF1F8 0x9AE6 +0xF1F9 0x9AEF +0xF1FA 0x9AEB +0xF1FB 0x9AEE +0xF1FC 0x9AF4 +0xF1FD 0x9AF1 +0xF1FE 0x9AF7 +0xF2A1 0x9AFB +0xF2A2 0x9B06 +0xF2A3 0x9B18 +0xF2A4 0x9B1A +0xF2A5 0x9B1F +0xF2A6 0x9B22 +0xF2A7 0x9B23 +0xF2A8 0x9B25 +0xF2A9 0x9B27 +0xF2AA 0x9B28 +0xF2AB 0x9B29 +0xF2AC 0x9B2A +0xF2AD 0x9B2E +0xF2AE 0x9B2F +0xF2AF 0x9B32 +0xF2B0 0x9B44 +0xF2B1 0x9B43 +0xF2B2 0x9B4F +0xF2B3 0x9B4D +0xF2B4 0x9B4E +0xF2B5 0x9B51 +0xF2B6 0x9B58 +0xF2B7 0x9B74 +0xF2B8 0x9B93 +0xF2B9 0x9B83 +0xF2BA 0x9B91 +0xF2BB 0x9B96 +0xF2BC 0x9B97 +0xF2BD 0x9B9F +0xF2BE 0x9BA0 +0xF2BF 0x9BA8 +0xF2C0 0x9BB4 +0xF2C1 0x9BC0 +0xF2C2 0x9BCA +0xF2C3 0x9BB9 +0xF2C4 0x9BC6 +0xF2C5 0x9BCF +0xF2C6 0x9BD1 +0xF2C7 0x9BD2 +0xF2C8 0x9BE3 +0xF2C9 0x9BE2 +0xF2CA 0x9BE4 +0xF2CB 0x9BD4 +0xF2CC 0x9BE1 +0xF2CD 0x9C3A +0xF2CE 0x9BF2 +0xF2CF 0x9BF1 +0xF2D0 0x9BF0 +0xF2D1 0x9C15 +0xF2D2 0x9C14 +0xF2D3 0x9C09 +0xF2D4 0x9C13 +0xF2D5 0x9C0C +0xF2D6 0x9C06 +0xF2D7 0x9C08 +0xF2D8 0x9C12 +0xF2D9 0x9C0A +0xF2DA 0x9C04 +0xF2DB 0x9C2E +0xF2DC 0x9C1B +0xF2DD 0x9C25 +0xF2DE 0x9C24 +0xF2DF 0x9C21 +0xF2E0 0x9C30 +0xF2E1 0x9C47 +0xF2E2 0x9C32 +0xF2E3 0x9C46 +0xF2E4 0x9C3E +0xF2E5 0x9C5A +0xF2E6 0x9C60 +0xF2E7 0x9C67 +0xF2E8 0x9C76 +0xF2E9 0x9C78 +0xF2EA 0x9CE7 +0xF2EB 0x9CEC +0xF2EC 0x9CF0 +0xF2ED 0x9D09 +0xF2EE 0x9D08 +0xF2EF 0x9CEB +0xF2F0 0x9D03 +0xF2F1 0x9D06 +0xF2F2 0x9D2A +0xF2F3 0x9D26 +0xF2F4 0x9DAF +0xF2F5 0x9D23 +0xF2F6 0x9D1F +0xF2F7 0x9D44 +0xF2F8 0x9D15 +0xF2F9 0x9D12 +0xF2FA 0x9D41 +0xF2FB 0x9D3F +0xF2FC 0x9D3E +0xF2FD 0x9D46 +0xF2FE 0x9D48 +0xF3A1 0x9D5D +0xF3A2 0x9D5E +0xF3A3 0x9D64 +0xF3A4 0x9D51 +0xF3A5 0x9D50 +0xF3A6 0x9D59 +0xF3A7 0x9D72 +0xF3A8 0x9D89 +0xF3A9 0x9D87 +0xF3AA 0x9DAB +0xF3AB 0x9D6F +0xF3AC 0x9D7A +0xF3AD 0x9D9A +0xF3AE 0x9DA4 +0xF3AF 0x9DA9 +0xF3B0 0x9DB2 +0xF3B1 0x9DC4 +0xF3B2 0x9DC1 +0xF3B3 0x9DBB +0xF3B4 0x9DB8 +0xF3B5 0x9DBA +0xF3B6 0x9DC6 +0xF3B7 0x9DCF +0xF3B8 0x9DC2 +0xF3B9 0x9DD9 +0xF3BA 0x9DD3 +0xF3BB 0x9DF8 +0xF3BC 0x9DE6 +0xF3BD 0x9DED +0xF3BE 0x9DEF +0xF3BF 0x9DFD +0xF3C0 0x9E1A +0xF3C1 0x9E1B +0xF3C2 0x9E1E +0xF3C3 0x9E75 +0xF3C4 0x9E79 +0xF3C5 0x9E7D +0xF3C6 0x9E81 +0xF3C7 0x9E88 +0xF3C8 0x9E8B +0xF3C9 0x9E8C +0xF3CA 0x9E92 +0xF3CB 0x9E95 +0xF3CC 0x9E91 +0xF3CD 0x9E9D +0xF3CE 0x9EA5 +0xF3CF 0x9EA9 +0xF3D0 0x9EB8 +0xF3D1 0x9EAA +0xF3D2 0x9EAD +0xF3D3 0x9761 +0xF3D4 0x9ECC +0xF3D5 0x9ECE +0xF3D6 0x9ECF +0xF3D7 0x9ED0 +0xF3D8 0x9ED4 +0xF3D9 0x9EDC +0xF3DA 0x9EDE +0xF3DB 0x9EDD +0xF3DC 0x9EE0 +0xF3DD 0x9EE5 +0xF3DE 0x9EE8 +0xF3DF 0x9EEF +0xF3E0 0x9EF4 +0xF3E1 0x9EF6 +0xF3E2 0x9EF7 +0xF3E3 0x9EF9 +0xF3E4 0x9EFB +0xF3E5 0x9EFC +0xF3E6 0x9EFD +0xF3E7 0x9F07 +0xF3E8 0x9F08 +0xF3E9 0x76B7 +0xF3EA 0x9F15 +0xF3EB 0x9F21 +0xF3EC 0x9F2C +0xF3ED 0x9F3E +0xF3EE 0x9F4A +0xF3EF 0x9F52 +0xF3F0 0x9F54 +0xF3F1 0x9F63 +0xF3F2 0x9F5F +0xF3F3 0x9F60 +0xF3F4 0x9F61 +0xF3F5 0x9F66 +0xF3F6 0x9F67 +0xF3F7 0x9F6C +0xF3F8 0x9F6A +0xF3F9 0x9F77 +0xF3FA 0x9F72 +0xF3FB 0x9F76 +0xF3FC 0x9F95 +0xF3FD 0x9F9C +0xF3FE 0x9FA0 +0xF4A1 0x582F +0xF4A2 0x69C7 +0xF4A3 0x9059 +0xF4A4 0x7464 +0xF4A5 0x51DC +0xF4A6 0x7199 diff --git a/ext/mbstring/tests/data/KOI8-R.txt b/ext/mbstring/tests/data/KOI8-R.txt new file mode 100644 index 0000000000..2a1afb70d9 --- /dev/null +++ b/ext/mbstring/tests/data/KOI8-R.txt @@ -0,0 +1,294 @@ +# KOI8-R.TXT +# Date: 2016-01-04 23:05:00 GMT [KW] +# © 2016 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: KOI8-R (RFC1489) to Unicode +# Unicode version: 3.0 +# Table version: 2.0 +# Table format: Format A +# Date: 18 August 1999 (header updated: 2016-January-04) +# Authors: Helmut Richter <richter@lrz.de> +# +# 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. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# Updated versions of this file may be found in: +# http://www.unicode.org/Public/MAPPINGS/ +# +# Any comments or problems, contact us 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 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 diff --git a/ext/mbstring/tests/data/KOI8-U.txt b/ext/mbstring/tests/data/KOI8-U.txt new file mode 100644 index 0000000000..c533b39409 --- /dev/null +++ b/ext/mbstring/tests/data/KOI8-U.txt @@ -0,0 +1,301 @@ +# KOI8-U.TXT +# Date: 2016-01-04 23:09:00 GMT [KW] +# © 2016 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# +# Name: KOI8-U (RFC2319) to Unicode +# Unicode version: 5.1 +# Table version: 2.0 +# Table format: Format A +# Date: 13 October 2008 (header updated: 2016-January-04) +# Authors: Philippe Verdy <verdy_p AT wanadoo.fr>, +# Helmut Richter <richter@lrz.de> +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# KOI8-U characters map into Unicode. The underlying document is the +# mapping described in RFC 2319. No statements are made as to whether +# this mapping is the same as the mapping defined as "Code Page 878" +# with some vendors. +# +# The KOI8-U (RFC2319) encoding is a variant based on KOI8-R (RFC1489), +# where the support for four additional Cyrillic letters was added (both small +# and capital letters), replacing 8 box-drawing characters. It is still widely +# used to encode texts in Ukrainian, Byelorussian and Bulgarian. +# +# Format: Three tab-separated columns +# Column #1 is the KOI8-U 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-U order. +# +# Version history +# 1.0 version: created. +# 2.0 version: updates to copyright notice and terms of use; no +# changes to character mappings +# +# 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 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 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE +0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xA6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xA7 0x0457 # CYRILLIC SMALL LETTER YI (UKRAINIAN) +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 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN +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 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xB6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xB7 0x0407 # CYRILLIC CAPITAL LETTER YI (UKRAINIAN) +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 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +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 diff --git a/ext/mbstring/tests/data/MacJapanese-SJIS.txt b/ext/mbstring/tests/data/MacJapanese-SJIS.txt new file mode 100644 index 0000000000..a604c019aa --- /dev/null +++ b/ext/mbstring/tests/data/MacJapanese-SJIS.txt @@ -0,0 +1,7728 @@ +#======================================================================= +# File name: JAPANESE.TXT +# +# Contents: Map (external version) from Mac OS Japanese +# encoding to Unicode 2.1 and later. +# +# Copyright: (c) 1994-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# <c1.4+1.5> and Text Encoding Converter 2.0. +# b4,c1 2002-Dec-19 Update URLs. Matches internal utom<b18>. +# b03 1999-Sep-22 Change mappings for 0xFF, 0x8150, 0x8163, +# 0xEB50, and 0xEB63 to reduce problems in +# interconversion with CP 932. Update contact +# e-mail address. Matches internal utom<b9>, +# ufrm<b10>, and Text Encoding Converter +# version 1.5. +# b02 1998-Aug-18 Update the mappings for Mac OS Japanese +# 0x8650 and 0x8855. Update the description of +# the PostScript screen variant. Matches +# internal utom<b7>, ufrm<b7>. +# n06 1998-Feb-05 Update to match internal utom<n10>, ufrm<n27> +# and Text Encoding Converter version 1.3: +# Use standard Unicodes plus transcoding hints +# instead of single corporate characters; see +# details below. Also reorder into single list +# with all one-byte characters at the +# beginning, and rewrite all the initial +# comments. +# n03 1995-Apr-15 Matches internal ufrm<n11>. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Japanese code (in hex as 0xNN or 0xNNNN) +# Column #2 is the corresponding Unicode or Unicode sequence (in +# hex as 0xNNNN, 0xNNNN+0xNNNN, etc.). Sequences of up to 5 +# Unicode characters are used here. +# Column #3 is a comment containing the Unicode name. +# In some cases an additional comment follows the Unicode name. +# +# The entries are in Mac OS Japanese code order. +# All one-byte characters are at the beginning. +# +# Some of these mappings require the use of corporate characters. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Japanese encoding uses the standard control characters at +# 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Japanese: +# ------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported directly in programming +# interfaces for QuickDraw Text, the Script Manager, and related +# Text Utilities. For other purposes it is supported via transcoding +# to and from Unicode. +# +# This table covers the standard Mac OS Japanese encoding used +# in Mac OS versions 7.1 and later. The Mac OS Japanese encoding is +# based on Shift-JIS, but adds another 300 or so characters using +# code points that are unassigned in Shift-JIS. Certain Mac OS +# Japanese fonts are based on a modified version of the Mac OS +# Japanese encoding; see below. +# +# Some of the information below comes from Ken Lunde's book +# "Understanding Japanese Information Processing", O'Reilly & Assoc., +# 1993. +# +# 1. Conventional Shift-JIS +# +# Most Shift-JIS implementations include the following characters: +# +# a) One-byte characters from JIS X0201-1976. This has two parts: +# +# - JIS-Roman, the Japanese national variant of ISO 646 (the +# international version of ASCII). This is identical to ASCII +# except that 0x5C is YEN SIGN instead of REVERSE SOLIDUS, +# 0x7E is OVERLINE instead of TILDE, and usually 0x7C is +# BROKEN BAR instead of VERTICAL LINE (although this last +# difference is sometimes seen as just a glyph variant). +# +# - "Halfwidth" katakana and punctuation characters with codes +# 0xA1-0xDF. +# +# c) Two-byte characters with first/lead/high byte in the range +# 0x81-0x9F or 0xE0-0xFC, and second/trail/low byte in the +# range 0x40-0x7E or 0x80-0xFC. The first byte range was chosen +# to avoid any JIS X0201 characters. The two-byte characters +# include: +# +# - Characters from JIS X0208-1990, transformed so they map +# onto Shift-JIS code points 0x8140-0xEFFC. The original JIS +# X0208 characters have code points in the range 0x2121 to +# 0x7E7E (corresponding to "ku-ten" codes in the range 1,1 to +# 94,94 - i.e. row and column on a JIS X0208 chart). +# +# - A user-defined range using Shift-JIS code points +# 0xF040-0xFCFC, providing 2444 code points. +# +# Note: PostScript fonts are based on JIS X0208-1983 (formerly +# known as JIS C6226-1983). This earlier version of JIS X0208 +# lacks two Kanji characters that were added for JIS X0208-1990; +# these have Shift-JIS codes xEAA3 and 0xEAA4. +# +# 2. Mac OS Japanese changes and additions +# +# a) One-byte changes and additions +# +# - Changes to JIS-Roman: In Mac OS Japanese, 0x7C and 0x7E +# are assigned as in ASCII, not as in JIS-Roman: +# 0x7C VERTICAL LINE (can be considered a glyph difference) +# 0x7E TILDE +# +# - Additional one-byte characters: basic Shift-JIS leaves +# five one-byte code points unassigned. Mac OS Japanese assigns +# these as follows: +# 0x80 REVERSE SOLIDUS (the character at 0x5C in ASCII) +# 0xA0 NO-BREAK SPACE ("halfwidth"; common Shift-JIS addition) +# 0xFD COPYRIGHT SIGN +# 0xFE TRADE MARK SIGN +# 0xFF halfwidth horizontal ellipsis +# +# b) Two-byte additions +# +# Many JIS X0208 code points are unassigned; these correspond to +# many unassigned code points in Shift-JIS. Many implementations +# of Shift-JIS, including Mac OS Japanese, add characters using +# these code points. The standard Mac OS Japanese additions are: +# +# - 260 symbols and dingbat-like number and letter forms using +# Shift-JIS codes in the range 0x8540-0x886D. These include +# circled and parenthesized numbers and letters, square katakana +# and Kanji forms, etc. +# +# - 53 vertical forms for hiragana, katakana, and punctuation, +# using Shift-JIS codes in the range 0xEB41-0xED96. These are +# so-called "ku+84" vertical forms, since their ku-ten code is +# derived from that of the corresponding abstract or horizontal +# form character by adding 84 to the ku (row) number. +# +# Most of these additional characters are found in other vendor +# implementations of Shift-JIS, although often with different +# code points, and so most of these characters are also found +# in Unicode. However, some of these additional characters do +# not correspond to any standard single Unicode character. +# +# 3. Mac OS Japanese font variants +# +# Some fonts used with Mac OS Japanese implement variants of the +# encoding described above. +# +# a) Basic variant +# +# This is used with the fonts TohabaGothic and TohabaMincho. This +# variant has none of the two-byte additions described in section 2b +# above, but it does have all the one-byte changes and additions +# described in section 2a. +# +# These fonts also lack glyphs for the Kanji characters at 0xEAA3 +# and 0xEAA4. +# +# b) PostScript screen variant +# +# This is used with the screen fonts ChuGothic and SaiMincho. This +# variant does not have the Apple 260 symbols and dingbat-like +# additions in the range 0x8540-0x886D; instead it has a different +# set of about 160 symbols and dingbat-like additions in the range +# 0x86A2-0x879C. Like the standard variant, it does have the ku+84 +# vertical forms in the range 0xEB41-0xED96; it also has additional +# vertical forms in the ranges 0xEE5F-0xEE6E and 0xEE80-0xEE81 +# (although many fonts do not have glyphs for these additional +# vertical forms). This variant also has the one-byte changes at +# 0x7C and 0x7E and the additions at 0x80 and 0xA0, but these fonts +# lack glyphs for the one-byte additions at 0xFD-0xFF. These fonts +# also lack glyphs for the Kanji characters at 0xEAA3 and 0xEAA4. +# +# c) PostScript printer variant +# +# When the screen fonts ChuGothic and SaiMincho are printed on +# certain printers such as Apple's LaserWriter NTX-J, the printer +# will use a built-in font that is supposed to match the screen font. +# In fact, the printer fonts implement a superset of the screen +# variant described above; the PostScript printer variant adds a +# set of about 440 additional characters in the range 0x8540-0x879C. +# This is a different set of additions than the 260 in standard +# Mac OS Japanese, and is similar to the "NEC" additions found in +# some other implementations. It includes circled and parenthesized +# numbers and letters and square katakana, as well as many two-byte +# "halfwidth" forms for Latin, katakana, punctuation, and box +# drawing characters. It also includes several duplicates of +# standard JIS X0208 characters. +# +# d) Old ku+10 verticals variant +# +# This is used with certain old versions of the fonts MaruGothic and +# HonMincho - only the versions of those fonts used in the Japanese +# localized versions of System 7.1. +# +# This variant has none of the two-byte additions described in +# section 2b above. Instead, it has a set of "ku+10" vertical forms +# for hiragana, katakana, and punctuation, using Shift-JIS codes in +# the range 0x8641-0x8896. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# 1. Mapping the user-defined range +# +# The table below covers only the standard Mac OS Japanese encoding. +# It does not include mappings for the Shift-JIS user-defined range; +# this is mapped onto Unicodes 0xE000-0xE98B as follows: +# 0xF040-0xF07E -> 0xE000-0xE03E +# 0xF080-0xF0FC -> 0xE03F-0xE0BB +# 0xF140-0xF17E -> 0xE0BC-0xE0FA +# 0xF180-0xF1FC -> 0xE0FB-0xE177 +# ... +# 0xFC40-0xFC7E -> 0xE8D0-0xE90E +# 0xFC80-0xFCFC -> 0xE90F-0xE98B +# +# 2. Mapping the Apple two-byte additions +# +# The goals in the mappings provided here are: +# - Ensure roundtrip mapping from every character in Mac OS Japanese +# to Unicode and back +# - Use standard Unicode characters as much as possible, to maximize +# interchangeability of the resulting Unicode text. Whenever possible, +# avoid having content carried by private-use characters. +# +# Since not all of the Mac OS Japanese characters correspond to +# distinct, single Unicode characters, we employ various strategies. +# +# a) Map a single Mac OS Japanese character to a sequence of Unicode +# characters +# +# For example, the character 0x8791 in the Apple extensions is a +# circled Kanji for "big". There is no single Unicode character for +# this. However, this can be mapped to the Unicode sequence +# 0x5927+0x20DD, ideograph "big" + COMBINING ENCLOSING CIRCLE. +# +# b) Use private use characters to mark variants or groupings that +# are similar to a sequence of one or more standard Unicode +# characters. +# +# Apple has defined a block of 32 corporate characters as "transcoding +# hints." These are used in combination with standard Unicode characters +# to force them to be treated in a special way for mapping to other +# encodings; they have no other effect. Sixteen of these transcoding +# hints are "grouping hints" - they indicate that the next 2-4 Unicode +# characters should be treated as a single entity for transcoding. The +# other sixteen transcoding hints are "variant tags" - they are like +# combining characters, and can follow a standard Unicode (or a sequence +# consisting of a base character and other combining characters) to +# cause it to be treated in a special way for transcoding. These always +# terminate a combining-character sequence. +# +# The transcoding coding hints used in this mapping table are: +# +# 0xF860 group next 2 characters as a single entity for transcoding +# 0xF861 group next 3 characters as a single entity for transcoding +# 0xF862 group next 4 characters as a single entity for transcoding +# 0xF87A variant tag for "negative" (i.e. black & white reversed) +# 0xF87E variant tag for vertical form +# 0xF87F variant tag for other alternate form +# +# For example, the Apple addition character 0x85AB is Roman numeral +# thirteen. There is no single Unicode for this (although there are +# standard Unicodes for Roman numerals 1-12). Using the grouping hint +# 0xF862 in combination with standard Unicodes, we can map this as +# 0xF862+0x0058+0x0049+0x0049+0x0049 (i.e. X + I + I + I). +# +# 3. Mapping the basic Shift-JIS characters and Apple one-byte additions +# +# The mappings for basic Shift-JIS are based on the UTC mappings for +# Shift-JIS dated 8 March 1994, by Glenn Adams and John H. Jenkins. +# +# There were adjusted as necessary to accommodate the Apple one-byte +# changes and additions. They were also adjusted to accommodate some +# changes to the UTC mapping suggested by the Japanese Standards +# Association. +# +# code UTC Apple reason +# point mapping mapping for change +# ----- ------- ------- ---------- +# 0x7E 0x203E 0x007E Mac OS Japanese has TILDE here, not +# OVERLINE +# 0x815C 0x2015 0x2014 Suggested by JSA +# 0x815F 0x005C 0xFF3C Avoid conflict with Apple one-byte +# addition 0x80, which maps to 0x005C. +# (CP 932 also maps 0x815F to 0xFF3C). +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version b02 to version b03: +# +# - Change the mapping for 0x8150 from 0x203E to 0xFFE3; change the +# mapping of the corresponding vertical form 0xEB50 from +# 0x203E+0xF87E to 0xFFE3+0xF87E. Change the mapping of 0x8163 from +# 0x22EF to 0x2026; change the mapping of the corresponding vertical +# form 0xEB63 from 0x22EF+0xF87E to 0x2026+0xF87E. These changes +# reduce problems in interconversion with CP 932. +# - Consequently, change the mapping of 0xFF from 0x2026 to +# 0x2026+0xF87F to avoid conflict with the new mapping of 0x8163. +# +# Changes from version n06 to version b02: +# +# - Change the mapping for 0x8650 from 0xFF4C+0xF87F to 0x2113; change +# the mapping for 0x8855 from 0x301E to 0x301F. Update the description +# of the PostScript screen variant to include the 160 characters in the +# range 0x86A2-0x879C. +# +# Changes from version n03 to version n06: +# +# - Changed mappings of several Apple additions from single corporate +# character to standard Unicodes + transcoding hint: +# 0x8591, 0x85AB-AD, 0x85BF-C1, 0x8645, 0x864B, 0x8650, 0x865D, 0x869E, +# 0x86CE, 0x86D3-D6, 0x87FB-FC. +# - Changed mapping of one Apple addition from single corporate character +# to standard Unicode: 0x8855. +# - Changed mappings of several Apple vertical forms additions from +# single corporate character to standard Unicodes + transcoding hint: +# 0xEB41-42, 0xEB50, 0xEB5B, 0xEB5D, 0xEB60-63, 0xEB6D-6E, 0xEB81, +# plus all vertical forms in the range 0xEC9F-ED96. +# +################## + +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 0x00A5 # YEN SIGN +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 # Apple change from standard Shift-JIS +# +0x80 0x005C # REVERSE SOLIDUS # Apple addition; changes mapping of 0x815F +# +0xA0 0x00A0 # NO-BREAK SPACE # Apple addition +0xA1 0xFF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 0xFF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 0xFF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 0xFF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 0xFF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 0xFF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 0xFF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 0xFF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA 0xFF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB 0xFF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC 0xFF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD 0xFF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE 0xFF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF 0xFF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 0xFF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 0xFF71 # HALFWIDTH KATAKANA LETTER A +0xB2 0xFF72 # HALFWIDTH KATAKANA LETTER I +0xB3 0xFF73 # HALFWIDTH KATAKANA LETTER U +0xB4 0xFF74 # HALFWIDTH KATAKANA LETTER E +0xB5 0xFF75 # HALFWIDTH KATAKANA LETTER O +0xB6 0xFF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 0xFF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 0xFF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 0xFF79 # HALFWIDTH KATAKANA LETTER KE +0xBA 0xFF7A # HALFWIDTH KATAKANA LETTER KO +0xBB 0xFF7B # HALFWIDTH KATAKANA LETTER SA +0xBC 0xFF7C # HALFWIDTH KATAKANA LETTER SI +0xBD 0xFF7D # HALFWIDTH KATAKANA LETTER SU +0xBE 0xFF7E # HALFWIDTH KATAKANA LETTER SE +0xBF 0xFF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 0xFF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 0xFF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 0xFF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 0xFF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 0xFF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 0xFF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 0xFF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 0xFF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 0xFF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 0xFF89 # HALFWIDTH KATAKANA LETTER NO +0xCA 0xFF8A # HALFWIDTH KATAKANA LETTER HA +0xCB 0xFF8B # HALFWIDTH KATAKANA LETTER HI +0xCC 0xFF8C # HALFWIDTH KATAKANA LETTER HU +0xCD 0xFF8D # HALFWIDTH KATAKANA LETTER HE +0xCE 0xFF8E # HALFWIDTH KATAKANA LETTER HO +0xCF 0xFF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 0xFF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 0xFF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 0xFF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 0xFF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 0xFF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 0xFF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 0xFF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 0xFF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 0xFF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 0xFF99 # HALFWIDTH KATAKANA LETTER RU +0xDA 0xFF9A # HALFWIDTH KATAKANA LETTER RE +0xDB 0xFF9B # HALFWIDTH KATAKANA LETTER RO +0xDC 0xFF9C # HALFWIDTH KATAKANA LETTER WA +0xDD 0xFF9D # HALFWIDTH KATAKANA LETTER N +0xDE 0xFF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF 0xFF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +# +0xFD 0x00A9 # COPYRIGHT SIGN # Apple addition +0xFE 0x2122 # TRADE MARK SIGN # Apple addition +0xFF 0x2026+0xF87F # halfwidth horizontal ellipsis # Apple addition +# +0x8140 0x3000 # IDEOGRAPHIC SPACE +0x8141 0x3001 # IDEOGRAPHIC COMMA +0x8142 0x3002 # IDEOGRAPHIC FULL STOP +0x8143 0xFF0C # FULLWIDTH COMMA +0x8144 0xFF0E # FULLWIDTH FULL STOP +0x8145 0x30FB # KATAKANA MIDDLE DOT +0x8146 0xFF1A # FULLWIDTH COLON +0x8147 0xFF1B # FULLWIDTH SEMICOLON +0x8148 0xFF1F # FULLWIDTH QUESTION MARK +0x8149 0xFF01 # FULLWIDTH EXCLAMATION MARK +0x814A 0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x814B 0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x814C 0x00B4 # ACUTE ACCENT +0x814D 0xFF40 # FULLWIDTH GRAVE ACCENT +0x814E 0x00A8 # DIAERESIS +0x814F 0xFF3E # FULLWIDTH CIRCUMFLEX ACCENT +0x8150 0xFFE3 # FULLWIDTH MACRON +0x8151 0xFF3F # FULLWIDTH LOW LINE +0x8152 0x30FD # KATAKANA ITERATION MARK +0x8153 0x30FE # KATAKANA VOICED ITERATION MARK +0x8154 0x309D # HIRAGANA ITERATION MARK +0x8155 0x309E # HIRAGANA VOICED ITERATION MARK +0x8156 0x3003 # DITTO MARK +0x8157 0x4EDD # <CJK> +0x8158 0x3005 # IDEOGRAPHIC ITERATION MARK +0x8159 0x3006 # IDEOGRAPHIC CLOSING MARK +0x815A 0x3007 # IDEOGRAPHIC NUMBER ZERO +0x815B 0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x815C 0x2014 # EM DASH # change UTC mapping to match JIS spec +0x815D 0x2010 # HYPHEN +0x815E 0xFF0F # FULLWIDTH SOLIDUS +0x815F 0xFF3C # FULLWIDTH REVERSE SOLIDUS # change UTC mapping to separate from 0x80 +0x8160 0x301C # WAVE DASH +0x8161 0x2016 # DOUBLE VERTICAL LINE +0x8162 0xFF5C # FULLWIDTH VERTICAL LINE +0x8163 0x2026 # HORIZONTAL ELLIPSIS +0x8164 0x2025 # TWO DOT LEADER +0x8165 0x2018 # LEFT SINGLE QUOTATION MARK +0x8166 0x2019 # RIGHT SINGLE QUOTATION MARK +0x8167 0x201C # LEFT DOUBLE QUOTATION MARK +0x8168 0x201D # RIGHT DOUBLE QUOTATION MARK +0x8169 0xFF08 # FULLWIDTH LEFT PARENTHESIS +0x816A 0xFF09 # FULLWIDTH RIGHT PARENTHESIS +0x816B 0x3014 # LEFT TORTOISE SHELL BRACKET +0x816C 0x3015 # RIGHT TORTOISE SHELL BRACKET +0x816D 0xFF3B # FULLWIDTH LEFT SQUARE BRACKET +0x816E 0xFF3D # FULLWIDTH RIGHT SQUARE BRACKET +0x816F 0xFF5B # FULLWIDTH LEFT CURLY BRACKET +0x8170 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET +0x8171 0x3008 # LEFT ANGLE BRACKET +0x8172 0x3009 # RIGHT ANGLE BRACKET +0x8173 0x300A # LEFT DOUBLE ANGLE BRACKET +0x8174 0x300B # RIGHT DOUBLE ANGLE BRACKET +0x8175 0x300C # LEFT CORNER BRACKET +0x8176 0x300D # RIGHT CORNER BRACKET +0x8177 0x300E # LEFT WHITE CORNER BRACKET +0x8178 0x300F # RIGHT WHITE CORNER BRACKET +0x8179 0x3010 # LEFT BLACK LENTICULAR BRACKET +0x817A 0x3011 # RIGHT BLACK LENTICULAR BRACKET +0x817B 0xFF0B # FULLWIDTH PLUS SIGN +0x817C 0x2212 # MINUS SIGN +0x817D 0x00B1 # PLUS-MINUS SIGN +0x817E 0x00D7 # MULTIPLICATION SIGN +0x8180 0x00F7 # DIVISION SIGN +0x8181 0xFF1D # FULLWIDTH EQUALS SIGN +0x8182 0x2260 # NOT EQUAL TO +0x8183 0xFF1C # FULLWIDTH LESS-THAN SIGN +0x8184 0xFF1E # FULLWIDTH GREATER-THAN SIGN +0x8185 0x2266 # LESS-THAN OVER EQUAL TO +0x8186 0x2267 # GREATER-THAN OVER EQUAL TO +0x8187 0x221E # INFINITY +0x8188 0x2234 # THEREFORE +0x8189 0x2642 # MALE SIGN +0x818A 0x2640 # FEMALE SIGN +0x818B 0x00B0 # DEGREE SIGN +0x818C 0x2032 # PRIME +0x818D 0x2033 # DOUBLE PRIME +0x818E 0x2103 # DEGREE CELSIUS +0x818F 0xFFE5 # FULLWIDTH YEN SIGN +0x8190 0xFF04 # FULLWIDTH DOLLAR SIGN +0x8191 0x00A2 # CENT SIGN +0x8192 0x00A3 # POUND SIGN +0x8193 0xFF05 # FULLWIDTH PERCENT SIGN +0x8194 0xFF03 # FULLWIDTH NUMBER SIGN +0x8195 0xFF06 # FULLWIDTH AMPERSAND +0x8196 0xFF0A # FULLWIDTH ASTERISK +0x8197 0xFF20 # FULLWIDTH COMMERCIAL AT +0x8198 0x00A7 # SECTION SIGN +0x8199 0x2606 # WHITE STAR +0x819A 0x2605 # BLACK STAR +0x819B 0x25CB # WHITE CIRCLE +0x819C 0x25CF # BLACK CIRCLE +0x819D 0x25CE # BULLSEYE +0x819E 0x25C7 # WHITE DIAMOND +0x819F 0x25C6 # BLACK DIAMOND +0x81A0 0x25A1 # WHITE SQUARE +0x81A1 0x25A0 # BLACK SQUARE +0x81A2 0x25B3 # WHITE UP-POINTING TRIANGLE +0x81A3 0x25B2 # BLACK UP-POINTING TRIANGLE +0x81A4 0x25BD # WHITE DOWN-POINTING TRIANGLE +0x81A5 0x25BC # BLACK DOWN-POINTING TRIANGLE +0x81A6 0x203B # REFERENCE MARK +0x81A7 0x3012 # POSTAL MARK +0x81A8 0x2192 # RIGHTWARDS ARROW +0x81A9 0x2190 # LEFTWARDS ARROW +0x81AA 0x2191 # UPWARDS ARROW +0x81AB 0x2193 # DOWNWARDS ARROW +0x81AC 0x3013 # GETA MARK +0x81B8 0x2208 # ELEMENT OF +0x81B9 0x220B # CONTAINS AS MEMBER +0x81BA 0x2286 # SUBSET OF OR EQUAL TO +0x81BB 0x2287 # SUPERSET OF OR EQUAL TO +0x81BC 0x2282 # SUBSET OF +0x81BD 0x2283 # SUPERSET OF +0x81BE 0x222A # UNION +0x81BF 0x2229 # INTERSECTION +0x81C8 0x2227 # LOGICAL AND +0x81C9 0x2228 # LOGICAL OR +0x81CA 0x00AC # NOT SIGN +0x81CB 0x21D2 # RIGHTWARDS DOUBLE ARROW +0x81CC 0x21D4 # LEFT RIGHT DOUBLE ARROW +0x81CD 0x2200 # FOR ALL +0x81CE 0x2203 # THERE EXISTS +0x81DA 0x2220 # ANGLE +0x81DB 0x22A5 # UP TACK +0x81DC 0x2312 # ARC +0x81DD 0x2202 # PARTIAL DIFFERENTIAL +0x81DE 0x2207 # NABLA +0x81DF 0x2261 # IDENTICAL TO +0x81E0 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF +0x81E1 0x226A # MUCH LESS-THAN +0x81E2 0x226B # MUCH GREATER-THAN +0x81E3 0x221A # SQUARE ROOT +0x81E4 0x223D # REVERSED TILDE # This UTC mapping is questionable +0x81E5 0x221D # PROPORTIONAL TO +0x81E6 0x2235 # BECAUSE +0x81E7 0x222B # INTEGRAL +0x81E8 0x222C # DOUBLE INTEGRAL +0x81F0 0x212B # ANGSTROM SIGN +0x81F1 0x2030 # PER MILLE SIGN +0x81F2 0x266F # MUSIC SHARP SIGN +0x81F3 0x266D # MUSIC FLAT SIGN +0x81F4 0x266A # EIGHTH NOTE +0x81F5 0x2020 # DAGGER +0x81F6 0x2021 # DOUBLE DAGGER +0x81F7 0x00B6 # PILCROW SIGN +0x81FC 0x25EF # LARGE CIRCLE +0x824F 0xFF10 # FULLWIDTH DIGIT ZERO +0x8250 0xFF11 # FULLWIDTH DIGIT ONE +0x8251 0xFF12 # FULLWIDTH DIGIT TWO +0x8252 0xFF13 # FULLWIDTH DIGIT THREE +0x8253 0xFF14 # FULLWIDTH DIGIT FOUR +0x8254 0xFF15 # FULLWIDTH DIGIT FIVE +0x8255 0xFF16 # FULLWIDTH DIGIT SIX +0x8256 0xFF17 # FULLWIDTH DIGIT SEVEN +0x8257 0xFF18 # FULLWIDTH DIGIT EIGHT +0x8258 0xFF19 # FULLWIDTH DIGIT NINE +0x8260 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A +0x8261 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B +0x8262 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C +0x8263 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D +0x8264 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E +0x8265 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F +0x8266 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G +0x8267 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H +0x8268 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I +0x8269 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J +0x826A 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K +0x826B 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L +0x826C 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M +0x826D 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N +0x826E 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O +0x826F 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P +0x8270 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q +0x8271 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R +0x8272 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S +0x8273 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T +0x8274 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U +0x8275 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V +0x8276 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W +0x8277 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X +0x8278 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y +0x8279 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z +0x8281 0xFF41 # FULLWIDTH LATIN SMALL LETTER A +0x8282 0xFF42 # FULLWIDTH LATIN SMALL LETTER B +0x8283 0xFF43 # FULLWIDTH LATIN SMALL LETTER C +0x8284 0xFF44 # FULLWIDTH LATIN SMALL LETTER D +0x8285 0xFF45 # FULLWIDTH LATIN SMALL LETTER E +0x8286 0xFF46 # FULLWIDTH LATIN SMALL LETTER F +0x8287 0xFF47 # FULLWIDTH LATIN SMALL LETTER G +0x8288 0xFF48 # FULLWIDTH LATIN SMALL LETTER H +0x8289 0xFF49 # FULLWIDTH LATIN SMALL LETTER I +0x828A 0xFF4A # FULLWIDTH LATIN SMALL LETTER J +0x828B 0xFF4B # FULLWIDTH LATIN SMALL LETTER K +0x828C 0xFF4C # FULLWIDTH LATIN SMALL LETTER L +0x828D 0xFF4D # FULLWIDTH LATIN SMALL LETTER M +0x828E 0xFF4E # FULLWIDTH LATIN SMALL LETTER N +0x828F 0xFF4F # FULLWIDTH LATIN SMALL LETTER O +0x8290 0xFF50 # FULLWIDTH LATIN SMALL LETTER P +0x8291 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q +0x8292 0xFF52 # FULLWIDTH LATIN SMALL LETTER R +0x8293 0xFF53 # FULLWIDTH LATIN SMALL LETTER S +0x8294 0xFF54 # FULLWIDTH LATIN SMALL LETTER T +0x8295 0xFF55 # FULLWIDTH LATIN SMALL LETTER U +0x8296 0xFF56 # FULLWIDTH LATIN SMALL LETTER V +0x8297 0xFF57 # FULLWIDTH LATIN SMALL LETTER W +0x8298 0xFF58 # FULLWIDTH LATIN SMALL LETTER X +0x8299 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y +0x829A 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z +0x829F 0x3041 # HIRAGANA LETTER SMALL A +0x82A0 0x3042 # HIRAGANA LETTER A +0x82A1 0x3043 # HIRAGANA LETTER SMALL I +0x82A2 0x3044 # HIRAGANA LETTER I +0x82A3 0x3045 # HIRAGANA LETTER SMALL U +0x82A4 0x3046 # HIRAGANA LETTER U +0x82A5 0x3047 # HIRAGANA LETTER SMALL E +0x82A6 0x3048 # HIRAGANA LETTER E +0x82A7 0x3049 # HIRAGANA LETTER SMALL O +0x82A8 0x304A # HIRAGANA LETTER O +0x82A9 0x304B # HIRAGANA LETTER KA +0x82AA 0x304C # HIRAGANA LETTER GA +0x82AB 0x304D # HIRAGANA LETTER KI +0x82AC 0x304E # HIRAGANA LETTER GI +0x82AD 0x304F # HIRAGANA LETTER KU +0x82AE 0x3050 # HIRAGANA LETTER GU +0x82AF 0x3051 # HIRAGANA LETTER KE +0x82B0 0x3052 # HIRAGANA LETTER GE +0x82B1 0x3053 # HIRAGANA LETTER KO +0x82B2 0x3054 # HIRAGANA LETTER GO +0x82B3 0x3055 # HIRAGANA LETTER SA +0x82B4 0x3056 # HIRAGANA LETTER ZA +0x82B5 0x3057 # HIRAGANA LETTER SI +0x82B6 0x3058 # HIRAGANA LETTER ZI +0x82B7 0x3059 # HIRAGANA LETTER SU +0x82B8 0x305A # HIRAGANA LETTER ZU +0x82B9 0x305B # HIRAGANA LETTER SE +0x82BA 0x305C # HIRAGANA LETTER ZE +0x82BB 0x305D # HIRAGANA LETTER SO +0x82BC 0x305E # HIRAGANA LETTER ZO +0x82BD 0x305F # HIRAGANA LETTER TA +0x82BE 0x3060 # HIRAGANA LETTER DA +0x82BF 0x3061 # HIRAGANA LETTER TI +0x82C0 0x3062 # HIRAGANA LETTER DI +0x82C1 0x3063 # HIRAGANA LETTER SMALL TU +0x82C2 0x3064 # HIRAGANA LETTER TU +0x82C3 0x3065 # HIRAGANA LETTER DU +0x82C4 0x3066 # HIRAGANA LETTER TE +0x82C5 0x3067 # HIRAGANA LETTER DE +0x82C6 0x3068 # HIRAGANA LETTER TO +0x82C7 0x3069 # HIRAGANA LETTER DO +0x82C8 0x306A # HIRAGANA LETTER NA +0x82C9 0x306B # HIRAGANA LETTER NI +0x82CA 0x306C # HIRAGANA LETTER NU +0x82CB 0x306D # HIRAGANA LETTER NE +0x82CC 0x306E # HIRAGANA LETTER NO +0x82CD 0x306F # HIRAGANA LETTER HA +0x82CE 0x3070 # HIRAGANA LETTER BA +0x82CF 0x3071 # HIRAGANA LETTER PA +0x82D0 0x3072 # HIRAGANA LETTER HI +0x82D1 0x3073 # HIRAGANA LETTER BI +0x82D2 0x3074 # HIRAGANA LETTER PI +0x82D3 0x3075 # HIRAGANA LETTER HU +0x82D4 0x3076 # HIRAGANA LETTER BU +0x82D5 0x3077 # HIRAGANA LETTER PU +0x82D6 0x3078 # HIRAGANA LETTER HE +0x82D7 0x3079 # HIRAGANA LETTER BE +0x82D8 0x307A # HIRAGANA LETTER PE +0x82D9 0x307B # HIRAGANA LETTER HO +0x82DA 0x307C # HIRAGANA LETTER BO +0x82DB 0x307D # HIRAGANA LETTER PO +0x82DC 0x307E # HIRAGANA LETTER MA +0x82DD 0x307F # HIRAGANA LETTER MI +0x82DE 0x3080 # HIRAGANA LETTER MU +0x82DF 0x3081 # HIRAGANA LETTER ME +0x82E0 0x3082 # HIRAGANA LETTER MO +0x82E1 0x3083 # HIRAGANA LETTER SMALL YA +0x82E2 0x3084 # HIRAGANA LETTER YA +0x82E3 0x3085 # HIRAGANA LETTER SMALL YU +0x82E4 0x3086 # HIRAGANA LETTER YU +0x82E5 0x3087 # HIRAGANA LETTER SMALL YO +0x82E6 0x3088 # HIRAGANA LETTER YO +0x82E7 0x3089 # HIRAGANA LETTER RA +0x82E8 0x308A # HIRAGANA LETTER RI +0x82E9 0x308B # HIRAGANA LETTER RU +0x82EA 0x308C # HIRAGANA LETTER RE +0x82EB 0x308D # HIRAGANA LETTER RO +0x82EC 0x308E # HIRAGANA LETTER SMALL WA +0x82ED 0x308F # HIRAGANA LETTER WA +0x82EE 0x3090 # HIRAGANA LETTER WI +0x82EF 0x3091 # HIRAGANA LETTER WE +0x82F0 0x3092 # HIRAGANA LETTER WO +0x82F1 0x3093 # HIRAGANA LETTER N +0x8340 0x30A1 # KATAKANA LETTER SMALL A +0x8341 0x30A2 # KATAKANA LETTER A +0x8342 0x30A3 # KATAKANA LETTER SMALL I +0x8343 0x30A4 # KATAKANA LETTER I +0x8344 0x30A5 # KATAKANA LETTER SMALL U +0x8345 0x30A6 # KATAKANA LETTER U +0x8346 0x30A7 # KATAKANA LETTER SMALL E +0x8347 0x30A8 # KATAKANA LETTER E +0x8348 0x30A9 # KATAKANA LETTER SMALL O +0x8349 0x30AA # KATAKANA LETTER O +0x834A 0x30AB # KATAKANA LETTER KA +0x834B 0x30AC # KATAKANA LETTER GA +0x834C 0x30AD # KATAKANA LETTER KI +0x834D 0x30AE # KATAKANA LETTER GI +0x834E 0x30AF # KATAKANA LETTER KU +0x834F 0x30B0 # KATAKANA LETTER GU +0x8350 0x30B1 # KATAKANA LETTER KE +0x8351 0x30B2 # KATAKANA LETTER GE +0x8352 0x30B3 # KATAKANA LETTER KO +0x8353 0x30B4 # KATAKANA LETTER GO +0x8354 0x30B5 # KATAKANA LETTER SA +0x8355 0x30B6 # KATAKANA LETTER ZA +0x8356 0x30B7 # KATAKANA LETTER SI +0x8357 0x30B8 # KATAKANA LETTER ZI +0x8358 0x30B9 # KATAKANA LETTER SU +0x8359 0x30BA # KATAKANA LETTER ZU +0x835A 0x30BB # KATAKANA LETTER SE +0x835B 0x30BC # KATAKANA LETTER ZE +0x835C 0x30BD # KATAKANA LETTER SO +0x835D 0x30BE # KATAKANA LETTER ZO +0x835E 0x30BF # KATAKANA LETTER TA +0x835F 0x30C0 # KATAKANA LETTER DA +0x8360 0x30C1 # KATAKANA LETTER TI +0x8361 0x30C2 # KATAKANA LETTER DI +0x8362 0x30C3 # KATAKANA LETTER SMALL TU +0x8363 0x30C4 # KATAKANA LETTER TU +0x8364 0x30C5 # KATAKANA LETTER DU +0x8365 0x30C6 # KATAKANA LETTER TE +0x8366 0x30C7 # KATAKANA LETTER DE +0x8367 0x30C8 # KATAKANA LETTER TO +0x8368 0x30C9 # KATAKANA LETTER DO +0x8369 0x30CA # KATAKANA LETTER NA +0x836A 0x30CB # KATAKANA LETTER NI +0x836B 0x30CC # KATAKANA LETTER NU +0x836C 0x30CD # KATAKANA LETTER NE +0x836D 0x30CE # KATAKANA LETTER NO +0x836E 0x30CF # KATAKANA LETTER HA +0x836F 0x30D0 # KATAKANA LETTER BA +0x8370 0x30D1 # KATAKANA LETTER PA +0x8371 0x30D2 # KATAKANA LETTER HI +0x8372 0x30D3 # KATAKANA LETTER BI +0x8373 0x30D4 # KATAKANA LETTER PI +0x8374 0x30D5 # KATAKANA LETTER HU +0x8375 0x30D6 # KATAKANA LETTER BU +0x8376 0x30D7 # KATAKANA LETTER PU +0x8377 0x30D8 # KATAKANA LETTER HE +0x8378 0x30D9 # KATAKANA LETTER BE +0x8379 0x30DA # KATAKANA LETTER PE +0x837A 0x30DB # KATAKANA LETTER HO +0x837B 0x30DC # KATAKANA LETTER BO +0x837C 0x30DD # KATAKANA LETTER PO +0x837D 0x30DE # KATAKANA LETTER MA +0x837E 0x30DF # KATAKANA LETTER MI +0x8380 0x30E0 # KATAKANA LETTER MU +0x8381 0x30E1 # KATAKANA LETTER ME +0x8382 0x30E2 # KATAKANA LETTER MO +0x8383 0x30E3 # KATAKANA LETTER SMALL YA +0x8384 0x30E4 # KATAKANA LETTER YA +0x8385 0x30E5 # KATAKANA LETTER SMALL YU +0x8386 0x30E6 # KATAKANA LETTER YU +0x8387 0x30E7 # KATAKANA LETTER SMALL YO +0x8388 0x30E8 # KATAKANA LETTER YO +0x8389 0x30E9 # KATAKANA LETTER RA +0x838A 0x30EA # KATAKANA LETTER RI +0x838B 0x30EB # KATAKANA LETTER RU +0x838C 0x30EC # KATAKANA LETTER RE +0x838D 0x30ED # KATAKANA LETTER RO +0x838E 0x30EE # KATAKANA LETTER SMALL WA +0x838F 0x30EF # KATAKANA LETTER WA +0x8390 0x30F0 # KATAKANA LETTER WI +0x8391 0x30F1 # KATAKANA LETTER WE +0x8392 0x30F2 # KATAKANA LETTER WO +0x8393 0x30F3 # KATAKANA LETTER N +0x8394 0x30F4 # KATAKANA LETTER VU +0x8395 0x30F5 # KATAKANA LETTER SMALL KA +0x8396 0x30F6 # KATAKANA LETTER SMALL KE +0x839F 0x0391 # GREEK CAPITAL LETTER ALPHA +0x83A0 0x0392 # GREEK CAPITAL LETTER BETA +0x83A1 0x0393 # GREEK CAPITAL LETTER GAMMA +0x83A2 0x0394 # GREEK CAPITAL LETTER DELTA +0x83A3 0x0395 # GREEK CAPITAL LETTER EPSILON +0x83A4 0x0396 # GREEK CAPITAL LETTER ZETA +0x83A5 0x0397 # GREEK CAPITAL LETTER ETA +0x83A6 0x0398 # GREEK CAPITAL LETTER THETA +0x83A7 0x0399 # GREEK CAPITAL LETTER IOTA +0x83A8 0x039A # GREEK CAPITAL LETTER KAPPA +0x83A9 0x039B # GREEK CAPITAL LETTER LAMDA +0x83AA 0x039C # GREEK CAPITAL LETTER MU +0x83AB 0x039D # GREEK CAPITAL LETTER NU +0x83AC 0x039E # GREEK CAPITAL LETTER XI +0x83AD 0x039F # GREEK CAPITAL LETTER OMICRON +0x83AE 0x03A0 # GREEK CAPITAL LETTER PI +0x83AF 0x03A1 # GREEK CAPITAL LETTER RHO +0x83B0 0x03A3 # GREEK CAPITAL LETTER SIGMA +0x83B1 0x03A4 # GREEK CAPITAL LETTER TAU +0x83B2 0x03A5 # GREEK CAPITAL LETTER UPSILON +0x83B3 0x03A6 # GREEK CAPITAL LETTER PHI +0x83B4 0x03A7 # GREEK CAPITAL LETTER CHI +0x83B5 0x03A8 # GREEK CAPITAL LETTER PSI +0x83B6 0x03A9 # GREEK CAPITAL LETTER OMEGA +0x83BF 0x03B1 # GREEK SMALL LETTER ALPHA +0x83C0 0x03B2 # GREEK SMALL LETTER BETA +0x83C1 0x03B3 # GREEK SMALL LETTER GAMMA +0x83C2 0x03B4 # GREEK SMALL LETTER DELTA +0x83C3 0x03B5 # GREEK SMALL LETTER EPSILON +0x83C4 0x03B6 # GREEK SMALL LETTER ZETA +0x83C5 0x03B7 # GREEK SMALL LETTER ETA +0x83C6 0x03B8 # GREEK SMALL LETTER THETA +0x83C7 0x03B9 # GREEK SMALL LETTER IOTA +0x83C8 0x03BA # GREEK SMALL LETTER KAPPA +0x83C9 0x03BB # GREEK SMALL LETTER LAMDA +0x83CA 0x03BC # GREEK SMALL LETTER MU +0x83CB 0x03BD # GREEK SMALL LETTER NU +0x83CC 0x03BE # GREEK SMALL LETTER XI +0x83CD 0x03BF # GREEK SMALL LETTER OMICRON +0x83CE 0x03C0 # GREEK SMALL LETTER PI +0x83CF 0x03C1 # GREEK SMALL LETTER RHO +0x83D0 0x03C3 # GREEK SMALL LETTER SIGMA +0x83D1 0x03C4 # GREEK SMALL LETTER TAU +0x83D2 0x03C5 # GREEK SMALL LETTER UPSILON +0x83D3 0x03C6 # GREEK SMALL LETTER PHI +0x83D4 0x03C7 # GREEK SMALL LETTER CHI +0x83D5 0x03C8 # GREEK SMALL LETTER PSI +0x83D6 0x03C9 # GREEK SMALL LETTER OMEGA +0x8440 0x0410 # CYRILLIC CAPITAL LETTER A +0x8441 0x0411 # CYRILLIC CAPITAL LETTER BE +0x8442 0x0412 # CYRILLIC CAPITAL LETTER VE +0x8443 0x0413 # CYRILLIC CAPITAL LETTER GHE +0x8444 0x0414 # CYRILLIC CAPITAL LETTER DE +0x8445 0x0415 # CYRILLIC CAPITAL LETTER IE +0x8446 0x0401 # CYRILLIC CAPITAL LETTER IO +0x8447 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0x8448 0x0417 # CYRILLIC CAPITAL LETTER ZE +0x8449 0x0418 # CYRILLIC CAPITAL LETTER I +0x844A 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0x844B 0x041A # CYRILLIC CAPITAL LETTER KA +0x844C 0x041B # CYRILLIC CAPITAL LETTER EL +0x844D 0x041C # CYRILLIC CAPITAL LETTER EM +0x844E 0x041D # CYRILLIC CAPITAL LETTER EN +0x844F 0x041E # CYRILLIC CAPITAL LETTER O +0x8450 0x041F # CYRILLIC CAPITAL LETTER PE +0x8451 0x0420 # CYRILLIC CAPITAL LETTER ER +0x8452 0x0421 # CYRILLIC CAPITAL LETTER ES +0x8453 0x0422 # CYRILLIC CAPITAL LETTER TE +0x8454 0x0423 # CYRILLIC CAPITAL LETTER U +0x8455 0x0424 # CYRILLIC CAPITAL LETTER EF +0x8456 0x0425 # CYRILLIC CAPITAL LETTER HA +0x8457 0x0426 # CYRILLIC CAPITAL LETTER TSE +0x8458 0x0427 # CYRILLIC CAPITAL LETTER CHE +0x8459 0x0428 # CYRILLIC CAPITAL LETTER SHA +0x845A 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0x845B 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x845C 0x042B # CYRILLIC CAPITAL LETTER YERU +0x845D 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x845E 0x042D # CYRILLIC CAPITAL LETTER E +0x845F 0x042E # CYRILLIC CAPITAL LETTER YU +0x8460 0x042F # CYRILLIC CAPITAL LETTER YA +0x8470 0x0430 # CYRILLIC SMALL LETTER A +0x8471 0x0431 # CYRILLIC SMALL LETTER BE +0x8472 0x0432 # CYRILLIC SMALL LETTER VE +0x8473 0x0433 # CYRILLIC SMALL LETTER GHE +0x8474 0x0434 # CYRILLIC SMALL LETTER DE +0x8475 0x0435 # CYRILLIC SMALL LETTER IE +0x8476 0x0451 # CYRILLIC SMALL LETTER IO +0x8477 0x0436 # CYRILLIC SMALL LETTER ZHE +0x8478 0x0437 # CYRILLIC SMALL LETTER ZE +0x8479 0x0438 # CYRILLIC SMALL LETTER I +0x847A 0x0439 # CYRILLIC SMALL LETTER SHORT I +0x847B 0x043A # CYRILLIC SMALL LETTER KA +0x847C 0x043B # CYRILLIC SMALL LETTER EL +0x847D 0x043C # CYRILLIC SMALL LETTER EM +0x847E 0x043D # CYRILLIC SMALL LETTER EN +0x8480 0x043E # CYRILLIC SMALL LETTER O +0x8481 0x043F # CYRILLIC SMALL LETTER PE +0x8482 0x0440 # CYRILLIC SMALL LETTER ER +0x8483 0x0441 # CYRILLIC SMALL LETTER ES +0x8484 0x0442 # CYRILLIC SMALL LETTER TE +0x8485 0x0443 # CYRILLIC SMALL LETTER U +0x8486 0x0444 # CYRILLIC SMALL LETTER EF +0x8487 0x0445 # CYRILLIC SMALL LETTER HA +0x8488 0x0446 # CYRILLIC SMALL LETTER TSE +0x8489 0x0447 # CYRILLIC SMALL LETTER CHE +0x848A 0x0448 # CYRILLIC SMALL LETTER SHA +0x848B 0x0449 # CYRILLIC SMALL LETTER SHCHA +0x848C 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0x848D 0x044B # CYRILLIC SMALL LETTER YERU +0x848E 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0x848F 0x044D # CYRILLIC SMALL LETTER E +0x8490 0x044E # CYRILLIC SMALL LETTER YU +0x8491 0x044F # CYRILLIC SMALL LETTER YA +0x849F 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL +0x84A0 0x2502 # BOX DRAWINGS LIGHT VERTICAL +0x84A1 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT +0x84A2 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT +0x84A3 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT +0x84A4 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT +0x84A5 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0x84A6 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0x84A7 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT +0x84A8 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL +0x84A9 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0x84AA 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL +0x84AB 0x2503 # BOX DRAWINGS HEAVY VERTICAL +0x84AC 0x250F # BOX DRAWINGS HEAVY DOWN AND RIGHT +0x84AD 0x2513 # BOX DRAWINGS HEAVY DOWN AND LEFT +0x84AE 0x251B # BOX DRAWINGS HEAVY UP AND LEFT +0x84AF 0x2517 # BOX DRAWINGS HEAVY UP AND RIGHT +0x84B0 0x2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT +0x84B1 0x2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +0x84B2 0x252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT +0x84B3 0x253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL +0x84B4 0x254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +0x84B5 0x2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +0x84B6 0x252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +0x84B7 0x2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +0x84B8 0x2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +0x84B9 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +0x84BA 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +0x84BB 0x2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +0x84BC 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +0x84BD 0x2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +0x84BE 0x2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + +# Apple additions +0x8540 0x2460 # CIRCLED DIGIT ONE +0x8541 0x2461 # CIRCLED DIGIT TWO +0x8542 0x2462 # CIRCLED DIGIT THREE +0x8543 0x2463 # CIRCLED DIGIT FOUR +0x8544 0x2464 # CIRCLED DIGIT FIVE +0x8545 0x2465 # CIRCLED DIGIT SIX +0x8546 0x2466 # CIRCLED DIGIT SEVEN +0x8547 0x2467 # CIRCLED DIGIT EIGHT +0x8548 0x2468 # CIRCLED DIGIT NINE +0x8549 0x2469 # CIRCLED NUMBER TEN +0x854A 0x246A # CIRCLED NUMBER ELEVEN +0x854B 0x246B # CIRCLED NUMBER TWELVE +0x854C 0x246C # CIRCLED NUMBER THIRTEEN +0x854D 0x246D # CIRCLED NUMBER FOURTEEN +0x854E 0x246E # CIRCLED NUMBER FIFTEEN +0x854F 0x246F # CIRCLED NUMBER SIXTEEN +0x8550 0x2470 # CIRCLED NUMBER SEVENTEEN +0x8551 0x2471 # CIRCLED NUMBER EIGHTEEN +0x8552 0x2472 # CIRCLED NUMBER NINETEEN +0x8553 0x2473 # CIRCLED NUMBER TWENTY +0x855E 0x2474 # PARENTHESIZED DIGIT ONE +0x855F 0x2475 # PARENTHESIZED DIGIT TWO +0x8560 0x2476 # PARENTHESIZED DIGIT THREE +0x8561 0x2477 # PARENTHESIZED DIGIT FOUR +0x8562 0x2478 # PARENTHESIZED DIGIT FIVE +0x8563 0x2479 # PARENTHESIZED DIGIT SIX +0x8564 0x247A # PARENTHESIZED DIGIT SEVEN +0x8565 0x247B # PARENTHESIZED DIGIT EIGHT +0x8566 0x247C # PARENTHESIZED DIGIT NINE +0x8567 0x247D # PARENTHESIZED NUMBER TEN +0x8568 0x247E # PARENTHESIZED NUMBER ELEVEN +0x8569 0x247F # PARENTHESIZED NUMBER TWELVE +0x856A 0x2480 # PARENTHESIZED NUMBER THIRTEEN +0x856B 0x2481 # PARENTHESIZED NUMBER FOURTEEN +0x856C 0x2482 # PARENTHESIZED NUMBER FIFTEEN +0x856D 0x2483 # PARENTHESIZED NUMBER SIXTEEN +0x856E 0x2484 # PARENTHESIZED NUMBER SEVENTEEN +0x856F 0x2485 # PARENTHESIZED NUMBER EIGHTEEN +0x8570 0x2486 # PARENTHESIZED NUMBER NINETEEN +0x8571 0x2487 # PARENTHESIZED NUMBER TWENTY +0x857C 0x2776 # DINGBAT NEGATIVE CIRCLED DIGIT ONE +0x857D 0x2777 # DINGBAT NEGATIVE CIRCLED DIGIT TWO +0x857E 0x2778 # DINGBAT NEGATIVE CIRCLED DIGIT THREE +0x8580 0x2779 # DINGBAT NEGATIVE CIRCLED DIGIT FOUR +0x8581 0x277A # DINGBAT NEGATIVE CIRCLED DIGIT FIVE +0x8582 0x277B # DINGBAT NEGATIVE CIRCLED DIGIT SIX +0x8583 0x277C # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN +0x8584 0x277D # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT +0x8585 0x277E # DINGBAT NEGATIVE CIRCLED DIGIT NINE +0x8591 0xF860+0x0030+0x002E # digit zero full stop +0x8592 0x2488 # DIGIT ONE FULL STOP +0x8593 0x2489 # DIGIT TWO FULL STOP +0x8594 0x248A # DIGIT THREE FULL STOP +0x8595 0x248B # DIGIT FOUR FULL STOP +0x8596 0x248C # DIGIT FIVE FULL STOP +0x8597 0x248D # DIGIT SIX FULL STOP +0x8598 0x248E # DIGIT SEVEN FULL STOP +0x8599 0x248F # DIGIT EIGHT FULL STOP +0x859A 0x2490 # DIGIT NINE FULL STOP +0x859F 0x2160 # ROMAN NUMERAL ONE +0x85A0 0x2161 # ROMAN NUMERAL TWO +0x85A1 0x2162 # ROMAN NUMERAL THREE +0x85A2 0x2163 # ROMAN NUMERAL FOUR +0x85A3 0x2164 # ROMAN NUMERAL FIVE +0x85A4 0x2165 # ROMAN NUMERAL SIX +0x85A5 0x2166 # ROMAN NUMERAL SEVEN +0x85A6 0x2167 # ROMAN NUMERAL EIGHT +0x85A7 0x2168 # ROMAN NUMERAL NINE +0x85A8 0x2169 # ROMAN NUMERAL TEN +0x85A9 0x216A # ROMAN NUMERAL ELEVEN +0x85AA 0x216B # ROMAN NUMERAL TWELVE +0x85AB 0xF862+0x0058+0x0049+0x0049+0x0049 # roman numeral thirteen +0x85AC 0xF861+0x0058+0x0049+0x0056 # roman numeral fourteen +0x85AD 0xF860+0x0058+0x0056 # roman numeral fifteen +0x85B3 0x2170 # SMALL ROMAN NUMERAL ONE +0x85B4 0x2171 # SMALL ROMAN NUMERAL TWO +0x85B5 0x2172 # SMALL ROMAN NUMERAL THREE +0x85B6 0x2173 # SMALL ROMAN NUMERAL FOUR +0x85B7 0x2174 # SMALL ROMAN NUMERAL FIVE +0x85B8 0x2175 # SMALL ROMAN NUMERAL SIX +0x85B9 0x2176 # SMALL ROMAN NUMERAL SEVEN +0x85BA 0x2177 # SMALL ROMAN NUMERAL EIGHT +0x85BB 0x2178 # SMALL ROMAN NUMERAL NINE +0x85BC 0x2179 # SMALL ROMAN NUMERAL TEN +0x85BD 0x217A # SMALL ROMAN NUMERAL ELEVEN +0x85BE 0x217B # SMALL ROMAN NUMERAL TWELVE +0x85BF 0xF862+0x0078+0x0069+0x0069+0x0069 # small roman numeral thirteen +0x85C0 0xF861+0x0078+0x0069+0x0076 # small roman numeral fourteen +0x85C1 0xF860+0x0078+0x0076 # small roman numeral fifteen +0x85DB 0x249C # PARENTHESIZED LATIN SMALL LETTER A +0x85DC 0x249D # PARENTHESIZED LATIN SMALL LETTER B +0x85DD 0x249E # PARENTHESIZED LATIN SMALL LETTER C +0x85DE 0x249F # PARENTHESIZED LATIN SMALL LETTER D +0x85DF 0x24A0 # PARENTHESIZED LATIN SMALL LETTER E +0x85E0 0x24A1 # PARENTHESIZED LATIN SMALL LETTER F +0x85E1 0x24A2 # PARENTHESIZED LATIN SMALL LETTER G +0x85E2 0x24A3 # PARENTHESIZED LATIN SMALL LETTER H +0x85E3 0x24A4 # PARENTHESIZED LATIN SMALL LETTER I +0x85E4 0x24A5 # PARENTHESIZED LATIN SMALL LETTER J +0x85E5 0x24A6 # PARENTHESIZED LATIN SMALL LETTER K +0x85E6 0x24A7 # PARENTHESIZED LATIN SMALL LETTER L +0x85E7 0x24A8 # PARENTHESIZED LATIN SMALL LETTER M +0x85E8 0x24A9 # PARENTHESIZED LATIN SMALL LETTER N +0x85E9 0x24AA # PARENTHESIZED LATIN SMALL LETTER O +0x85EA 0x24AB # PARENTHESIZED LATIN SMALL LETTER P +0x85EB 0x24AC # PARENTHESIZED LATIN SMALL LETTER Q +0x85EC 0x24AD # PARENTHESIZED LATIN SMALL LETTER R +0x85ED 0x24AE # PARENTHESIZED LATIN SMALL LETTER S +0x85EE 0x24AF # PARENTHESIZED LATIN SMALL LETTER T +0x85EF 0x24B0 # PARENTHESIZED LATIN SMALL LETTER U +0x85F0 0x24B1 # PARENTHESIZED LATIN SMALL LETTER V +0x85F1 0x24B2 # PARENTHESIZED LATIN SMALL LETTER W +0x85F2 0x24B3 # PARENTHESIZED LATIN SMALL LETTER X +0x85F3 0x24B4 # PARENTHESIZED LATIN SMALL LETTER Y +0x85F4 0x24B5 # PARENTHESIZED LATIN SMALL LETTER Z +0x8640 0x339C # SQUARE MM +0x8641 0x339F # SQUARE MM SQUARED +0x8642 0x339D # SQUARE CM +0x8643 0x33A0 # SQUARE CM SQUARED +0x8644 0x33A4 # SQUARE CM CUBED +0x8645 0xFF4D+0xF87F # square m +0x8646 0x33A1 # SQUARE M SQUARED +0x8647 0x33A5 # SQUARE M CUBED +0x8648 0x339E # SQUARE KM +0x8649 0x33A2 # SQUARE KM SQUARED +0x864A 0x338E # SQUARE MG +0x864B 0xFF47+0xF87F # square g +0x864C 0x338F # SQUARE KG +0x864D 0x33C4 # SQUARE CC +0x864E 0x3396 # SQUARE ML +0x864F 0x3397 # SQUARE DL +0x8650 0x2113 # SCRIPT SMALL L +0x8651 0x3398 # SQUARE KL +0x8652 0x33B3 # SQUARE MS +0x8653 0x33B2 # SQUARE MU S +0x8654 0x33B1 # SQUARE NS +0x8655 0x33B0 # SQUARE PS +0x8656 0x2109 # DEGREE FAHRENHEIT +0x8657 0x33D4 # SQUARE MB SMALL +0x8658 0x33CB # SQUARE HP +0x8659 0x3390 # SQUARE HZ +0x865A 0x3385 # SQUARE KB +0x865B 0x3386 # SQUARE MB +0x865C 0x3387 # SQUARE GB +0x865D 0xF860+0x0054+0x0042 # square TB +0x869B 0x2116 # NUMERO SIGN +0x869C 0x33CD # SQUARE KK +0x869D 0x2121 # TELEPHONE SIGN +0x869E 0xF861+0x0046+0x0041+0x0058 # FAX sign # or for Unicode 4.0, 0x213B FACSIMILE SIGN +0x869F 0x2664 # WHITE SPADE SUIT +0x86A0 0x2667 # WHITE CLUB SUIT +0x86A1 0x2661 # WHITE HEART SUIT +0x86A2 0x2662 # WHITE DIAMOND SUIT +0x86A3 0x2660 # BLACK SPADE SUIT +0x86A4 0x2663 # BLACK CLUB SUIT +0x86A5 0x2665 # BLACK HEART SUIT +0x86A6 0x2666 # BLACK DIAMOND SUIT +0x86B3 0x3020 # POSTAL MARK FACE +0x86B4 0x260E # BLACK TELEPHONE +0x86B5 0x3004 # JAPANESE INDUSTRIAL STANDARD SYMBOL +0x86C7 0x261E # WHITE RIGHT POINTING INDEX +0x86C8 0x261C # WHITE LEFT POINTING INDEX +0x86C9 0x261D # WHITE UP POINTING INDEX +0x86CA 0x261F # WHITE DOWN POINTING INDEX +0x86CB 0x21C6 # LEFTWARDS ARROW OVER RIGHTWARDS ARROW +0x86CC 0x21C4 # RIGHTWARDS ARROW OVER LEFTWARDS ARROW +0x86CD 0x21C5 # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW +0x86CE 0xF860+0x2193+0x2191 # downwards arrow leftwards of upwards arrow +0x86CF 0x21E8 # RIGHTWARDS WHITE ARROW +0x86D0 0x21E6 # LEFTWARDS WHITE ARROW +0x86D1 0x21E7 # UPWARDS WHITE ARROW +0x86D2 0x21E9 # DOWNWARDS WHITE ARROW +0x86D3 0x21E8+0xF87A # rightwards black arrow # or 0x27A1 BLACK RIGHTWARDS ARROW +0x86D4 0x21E6+0xF87A # leftwards black arrow # or for Unicode 4.0, 0x2B05 LEFTWARDS BLACK ARROW +0x86D5 0x21E7+0xF87A # upwards black arrow # or for Unicode 4.0, 0x2B06 UPWARDS BLACK ARROW +0x86D6 0x21E9+0xF87A # downwards black arrow # or for Unicode 4.0, 0x2B07 DOWNWARDS BLACK ARROW +0x8740 0x3230 # PARENTHESIZED IDEOGRAPH SUN +0x8741 0x322A # PARENTHESIZED IDEOGRAPH MOON +0x8742 0x322B # PARENTHESIZED IDEOGRAPH FIRE +0x8743 0x322C # PARENTHESIZED IDEOGRAPH WATER +0x8744 0x322D # PARENTHESIZED IDEOGRAPH WOOD +0x8745 0x322E # PARENTHESIZED IDEOGRAPH METAL +0x8746 0x322F # PARENTHESIZED IDEOGRAPH EARTH +0x8747 0x3240 # PARENTHESIZED IDEOGRAPH FESTIVAL +0x8748 0x3237 # PARENTHESIZED IDEOGRAPH CONGRATULATION +0x8749 0x3242 # PARENTHESIZED IDEOGRAPH SELF +0x874A 0x3243 # PARENTHESIZED IDEOGRAPH REACH +0x874B 0x3239 # PARENTHESIZED IDEOGRAPH REPRESENT +0x874C 0x323A # PARENTHESIZED IDEOGRAPH CALL +0x874D 0x3231 # PARENTHESIZED IDEOGRAPH STOCK +0x874E 0x323E # PARENTHESIZED IDEOGRAPH RESOURCE +0x874F 0x3234 # PARENTHESIZED IDEOGRAPH NAME +0x8750 0x3232 # PARENTHESIZED IDEOGRAPH HAVE +0x8751 0x323B # PARENTHESIZED IDEOGRAPH STUDY +0x8752 0x3236 # PARENTHESIZED IDEOGRAPH FINANCIAL +0x8753 0x3233 # PARENTHESIZED IDEOGRAPH SOCIETY +0x8754 0x3235 # PARENTHESIZED IDEOGRAPH SPECIAL +0x8755 0x323C # PARENTHESIZED IDEOGRAPH SUPERVISE +0x8756 0x323D # PARENTHESIZED IDEOGRAPH ENTERPRISE +0x8757 0x323F # PARENTHESIZED IDEOGRAPH ALLIANCE +0x8758 0x3238 # PARENTHESIZED IDEOGRAPH LABOR +0x8791 0x5927+0x20DD # ideograph big + COMBINING ENCLOSING CIRCLE +0x8792 0x5C0F+0x20DD # ideograph small + COMBINING ENCLOSING CIRCLE +0x8793 0x32A4 # CIRCLED IDEOGRAPH HIGH +0x8794 0x32A5 # CIRCLED IDEOGRAPH CENTRE +0x8795 0x32A6 # CIRCLED IDEOGRAPH LOW +0x8796 0x32A7 # CIRCLED IDEOGRAPH LEFT +0x8797 0x32A8 # CIRCLED IDEOGRAPH RIGHT +0x8798 0x32A9 # CIRCLED IDEOGRAPH MEDICINE +0x8799 0x3296 # CIRCLED IDEOGRAPH FINANCIAL +0x879A 0x329D # CIRCLED IDEOGRAPH EXCELLENT +0x879B 0x3298 # CIRCLED IDEOGRAPH LABOR +0x879C 0x329E # CIRCLED IDEOGRAPH PRINT +0x879D 0x63A7+0x20DD # ideograph memo + COMBINING ENCLOSING CIRCLE +0x879E 0x3299 # CIRCLED IDEOGRAPH SECRET +0x879F 0x3349 # SQUARE MIRI +0x87A0 0x3322 # SQUARE SENTI +0x87A1 0x334D # SQUARE MEETORU +0x87A2 0x3314 # SQUARE KIRO +0x87A3 0x3316 # SQUARE KIROMEETORU +0x87A4 0x3305 # SQUARE INTI +0x87A5 0x3333 # SQUARE HUIITO +0x87A6 0x334E # SQUARE YAADO +0x87A7 0x3303 # SQUARE AARU +0x87A8 0x3336 # SQUARE HEKUTAARU +0x87A9 0x3318 # SQUARE GURAMU +0x87AA 0x3315 # SQUARE KIROGURAMU +0x87AB 0x3327 # SQUARE TON +0x87AC 0x3351 # SQUARE RITTORU +0x87AD 0x334A # SQUARE MIRIBAARU +0x87AE 0x3339 # SQUARE HERUTU +0x87AF 0x3357 # SQUARE WATTO +0x87B0 0x330D # SQUARE KARORII +0x87B1 0x3342 # SQUARE HOON +0x87B2 0x3323 # SQUARE SENTO +0x87B3 0x3326 # SQUARE DORU +0x87B4 0x333B # SQUARE PEEZI +0x87B5 0x332B # SQUARE PAASENTO +0x87BD 0x3300 # SQUARE APAATO +0x87BE 0x331E # SQUARE KOOPO +0x87BF 0x332A # SQUARE HAITU +0x87C0 0x3331 # SQUARE BIRU +0x87C1 0x3347 # SQUARE MANSYON +0x87E5 0x337E # SQUARE ERA NAME MEIZI +0x87E6 0x337D # SQUARE ERA NAME TAISYOU +0x87E7 0x337C # SQUARE ERA NAME SYOUWA +0x87E8 0x337B # SQUARE ERA NAME HEISEI +0x87FA 0x337F # SQUARE CORPORATION +0x87FB 0xF862+0x6709+0x9650+0x4F1A+0x793E # square "limited company, ltd. [yuugen gaisha]" +0x87FC 0xF862+0x8CA1+0x56E3+0x6CD5+0x4EBA # square "foundation [zaidan houjin]" +0x8840 0x222E # CONTOUR INTEGRAL +0x8841 0x221F # RIGHT ANGLE +0x8842 0x22BF # RIGHT TRIANGLE +0x8854 0x301D # REVERSED DOUBLE PRIME QUOTATION MARK +0x8855 0x301F # LOW DOUBLE PRIME QUOTATION MARK +0x8868 0x3094 # HIRAGANA LETTER VU +0x886A 0x30F7 # KATAKANA LETTER VA +0x886B 0x30F8 # KATAKANA LETTER VI +0x886C 0x30F9 # KATAKANA LETTER VE +0x886D 0x30FA # KATAKANA LETTER VO + +# Standard +0x889F 0x4E9C # <CJK> +0x88A0 0x5516 # <CJK> +0x88A1 0x5A03 # <CJK> +0x88A2 0x963F # <CJK> +0x88A3 0x54C0 # <CJK> +0x88A4 0x611B # <CJK> +0x88A5 0x6328 # <CJK> +0x88A6 0x59F6 # <CJK> +0x88A7 0x9022 # <CJK> +0x88A8 0x8475 # <CJK> +0x88A9 0x831C # <CJK> +0x88AA 0x7A50 # <CJK> +0x88AB 0x60AA # <CJK> +0x88AC 0x63E1 # <CJK> +0x88AD 0x6E25 # <CJK> +0x88AE 0x65ED # <CJK> +0x88AF 0x8466 # <CJK> +0x88B0 0x82A6 # <CJK> +0x88B1 0x9BF5 # <CJK> +0x88B2 0x6893 # <CJK> +0x88B3 0x5727 # <CJK> +0x88B4 0x65A1 # <CJK> +0x88B5 0x6271 # <CJK> +0x88B6 0x5B9B # <CJK> +0x88B7 0x59D0 # <CJK> +0x88B8 0x867B # <CJK> +0x88B9 0x98F4 # <CJK> +0x88BA 0x7D62 # <CJK> +0x88BB 0x7DBE # <CJK> +0x88BC 0x9B8E # <CJK> +0x88BD 0x6216 # <CJK> +0x88BE 0x7C9F # <CJK> +0x88BF 0x88B7 # <CJK> +0x88C0 0x5B89 # <CJK> +0x88C1 0x5EB5 # <CJK> +0x88C2 0x6309 # <CJK> +0x88C3 0x6697 # <CJK> +0x88C4 0x6848 # <CJK> +0x88C5 0x95C7 # <CJK> +0x88C6 0x978D # <CJK> +0x88C7 0x674F # <CJK> +0x88C8 0x4EE5 # <CJK> +0x88C9 0x4F0A # <CJK> +0x88CA 0x4F4D # <CJK> +0x88CB 0x4F9D # <CJK> +0x88CC 0x5049 # <CJK> +0x88CD 0x56F2 # <CJK> +0x88CE 0x5937 # <CJK> +0x88CF 0x59D4 # <CJK> +0x88D0 0x5A01 # <CJK> +0x88D1 0x5C09 # <CJK> +0x88D2 0x60DF # <CJK> +0x88D3 0x610F # <CJK> +0x88D4 0x6170 # <CJK> +0x88D5 0x6613 # <CJK> +0x88D6 0x6905 # <CJK> +0x88D7 0x70BA # <CJK> +0x88D8 0x754F # <CJK> +0x88D9 0x7570 # <CJK> +0x88DA 0x79FB # <CJK> +0x88DB 0x7DAD # <CJK> +0x88DC 0x7DEF # <CJK> +0x88DD 0x80C3 # <CJK> +0x88DE 0x840E # <CJK> +0x88DF 0x8863 # <CJK> +0x88E0 0x8B02 # <CJK> +0x88E1 0x9055 # <CJK> +0x88E2 0x907A # <CJK> +0x88E3 0x533B # <CJK> +0x88E4 0x4E95 # <CJK> +0x88E5 0x4EA5 # <CJK> +0x88E6 0x57DF # <CJK> +0x88E7 0x80B2 # <CJK> +0x88E8 0x90C1 # <CJK> +0x88E9 0x78EF # <CJK> +0x88EA 0x4E00 # <CJK> +0x88EB 0x58F1 # <CJK> +0x88EC 0x6EA2 # <CJK> +0x88ED 0x9038 # <CJK> +0x88EE 0x7A32 # <CJK> +0x88EF 0x8328 # <CJK> +0x88F0 0x828B # <CJK> +0x88F1 0x9C2F # <CJK> +0x88F2 0x5141 # <CJK> +0x88F3 0x5370 # <CJK> +0x88F4 0x54BD # <CJK> +0x88F5 0x54E1 # <CJK> +0x88F6 0x56E0 # <CJK> +0x88F7 0x59FB # <CJK> +0x88F8 0x5F15 # <CJK> +0x88F9 0x98F2 # <CJK> +0x88FA 0x6DEB # <CJK> +0x88FB 0x80E4 # <CJK> +0x88FC 0x852D # <CJK> +0x8940 0x9662 # <CJK> +0x8941 0x9670 # <CJK> +0x8942 0x96A0 # <CJK> +0x8943 0x97FB # <CJK> +0x8944 0x540B # <CJK> +0x8945 0x53F3 # <CJK> +0x8946 0x5B87 # <CJK> +0x8947 0x70CF # <CJK> +0x8948 0x7FBD # <CJK> +0x8949 0x8FC2 # <CJK> +0x894A 0x96E8 # <CJK> +0x894B 0x536F # <CJK> +0x894C 0x9D5C # <CJK> +0x894D 0x7ABA # <CJK> +0x894E 0x4E11 # <CJK> +0x894F 0x7893 # <CJK> +0x8950 0x81FC # <CJK> +0x8951 0x6E26 # <CJK> +0x8952 0x5618 # <CJK> +0x8953 0x5504 # <CJK> +0x8954 0x6B1D # <CJK> +0x8955 0x851A # <CJK> +0x8956 0x9C3B # <CJK> +0x8957 0x59E5 # <CJK> +0x8958 0x53A9 # <CJK> +0x8959 0x6D66 # <CJK> +0x895A 0x74DC # <CJK> +0x895B 0x958F # <CJK> +0x895C 0x5642 # <CJK> +0x895D 0x4E91 # <CJK> +0x895E 0x904B # <CJK> +0x895F 0x96F2 # <CJK> +0x8960 0x834F # <CJK> +0x8961 0x990C # <CJK> +0x8962 0x53E1 # <CJK> +0x8963 0x55B6 # <CJK> +0x8964 0x5B30 # <CJK> +0x8965 0x5F71 # <CJK> +0x8966 0x6620 # <CJK> +0x8967 0x66F3 # <CJK> +0x8968 0x6804 # <CJK> +0x8969 0x6C38 # <CJK> +0x896A 0x6CF3 # <CJK> +0x896B 0x6D29 # <CJK> +0x896C 0x745B # <CJK> +0x896D 0x76C8 # <CJK> +0x896E 0x7A4E # <CJK> +0x896F 0x9834 # <CJK> +0x8970 0x82F1 # <CJK> +0x8971 0x885B # <CJK> +0x8972 0x8A60 # <CJK> +0x8973 0x92ED # <CJK> +0x8974 0x6DB2 # <CJK> +0x8975 0x75AB # <CJK> +0x8976 0x76CA # <CJK> +0x8977 0x99C5 # <CJK> +0x8978 0x60A6 # <CJK> +0x8979 0x8B01 # <CJK> +0x897A 0x8D8A # <CJK> +0x897B 0x95B2 # <CJK> +0x897C 0x698E # <CJK> +0x897D 0x53AD # <CJK> +0x897E 0x5186 # <CJK> +0x8980 0x5712 # <CJK> +0x8981 0x5830 # <CJK> +0x8982 0x5944 # <CJK> +0x8983 0x5BB4 # <CJK> +0x8984 0x5EF6 # <CJK> +0x8985 0x6028 # <CJK> +0x8986 0x63A9 # <CJK> +0x8987 0x63F4 # <CJK> +0x8988 0x6CBF # <CJK> +0x8989 0x6F14 # <CJK> +0x898A 0x708E # <CJK> +0x898B 0x7114 # <CJK> +0x898C 0x7159 # <CJK> +0x898D 0x71D5 # <CJK> +0x898E 0x733F # <CJK> +0x898F 0x7E01 # <CJK> +0x8990 0x8276 # <CJK> +0x8991 0x82D1 # <CJK> +0x8992 0x8597 # <CJK> +0x8993 0x9060 # <CJK> +0x8994 0x925B # <CJK> +0x8995 0x9D1B # <CJK> +0x8996 0x5869 # <CJK> +0x8997 0x65BC # <CJK> +0x8998 0x6C5A # <CJK> +0x8999 0x7525 # <CJK> +0x899A 0x51F9 # <CJK> +0x899B 0x592E # <CJK> +0x899C 0x5965 # <CJK> +0x899D 0x5F80 # <CJK> +0x899E 0x5FDC # <CJK> +0x899F 0x62BC # <CJK> +0x89A0 0x65FA # <CJK> +0x89A1 0x6A2A # <CJK> +0x89A2 0x6B27 # <CJK> +0x89A3 0x6BB4 # <CJK> +0x89A4 0x738B # <CJK> +0x89A5 0x7FC1 # <CJK> +0x89A6 0x8956 # <CJK> +0x89A7 0x9D2C # <CJK> +0x89A8 0x9D0E # <CJK> +0x89A9 0x9EC4 # <CJK> +0x89AA 0x5CA1 # <CJK> +0x89AB 0x6C96 # <CJK> +0x89AC 0x837B # <CJK> +0x89AD 0x5104 # <CJK> +0x89AE 0x5C4B # <CJK> +0x89AF 0x61B6 # <CJK> +0x89B0 0x81C6 # <CJK> +0x89B1 0x6876 # <CJK> +0x89B2 0x7261 # <CJK> +0x89B3 0x4E59 # <CJK> +0x89B4 0x4FFA # <CJK> +0x89B5 0x5378 # <CJK> +0x89B6 0x6069 # <CJK> +0x89B7 0x6E29 # <CJK> +0x89B8 0x7A4F # <CJK> +0x89B9 0x97F3 # <CJK> +0x89BA 0x4E0B # <CJK> +0x89BB 0x5316 # <CJK> +0x89BC 0x4EEE # <CJK> +0x89BD 0x4F55 # <CJK> +0x89BE 0x4F3D # <CJK> +0x89BF 0x4FA1 # <CJK> +0x89C0 0x4F73 # <CJK> +0x89C1 0x52A0 # <CJK> +0x89C2 0x53EF # <CJK> +0x89C3 0x5609 # <CJK> +0x89C4 0x590F # <CJK> +0x89C5 0x5AC1 # <CJK> +0x89C6 0x5BB6 # <CJK> +0x89C7 0x5BE1 # <CJK> +0x89C8 0x79D1 # <CJK> +0x89C9 0x6687 # <CJK> +0x89CA 0x679C # <CJK> +0x89CB 0x67B6 # <CJK> +0x89CC 0x6B4C # <CJK> +0x89CD 0x6CB3 # <CJK> +0x89CE 0x706B # <CJK> +0x89CF 0x73C2 # <CJK> +0x89D0 0x798D # <CJK> +0x89D1 0x79BE # <CJK> +0x89D2 0x7A3C # <CJK> +0x89D3 0x7B87 # <CJK> +0x89D4 0x82B1 # <CJK> +0x89D5 0x82DB # <CJK> +0x89D6 0x8304 # <CJK> +0x89D7 0x8377 # <CJK> +0x89D8 0x83EF # <CJK> +0x89D9 0x83D3 # <CJK> +0x89DA 0x8766 # <CJK> +0x89DB 0x8AB2 # <CJK> +0x89DC 0x5629 # <CJK> +0x89DD 0x8CA8 # <CJK> +0x89DE 0x8FE6 # <CJK> +0x89DF 0x904E # <CJK> +0x89E0 0x971E # <CJK> +0x89E1 0x868A # <CJK> +0x89E2 0x4FC4 # <CJK> +0x89E3 0x5CE8 # <CJK> +0x89E4 0x6211 # <CJK> +0x89E5 0x7259 # <CJK> +0x89E6 0x753B # <CJK> +0x89E7 0x81E5 # <CJK> +0x89E8 0x82BD # <CJK> +0x89E9 0x86FE # <CJK> +0x89EA 0x8CC0 # <CJK> +0x89EB 0x96C5 # <CJK> +0x89EC 0x9913 # <CJK> +0x89ED 0x99D5 # <CJK> +0x89EE 0x4ECB # <CJK> +0x89EF 0x4F1A # <CJK> +0x89F0 0x89E3 # <CJK> +0x89F1 0x56DE # <CJK> +0x89F2 0x584A # <CJK> +0x89F3 0x58CA # <CJK> +0x89F4 0x5EFB # <CJK> +0x89F5 0x5FEB # <CJK> +0x89F6 0x602A # <CJK> +0x89F7 0x6094 # <CJK> +0x89F8 0x6062 # <CJK> +0x89F9 0x61D0 # <CJK> +0x89FA 0x6212 # <CJK> +0x89FB 0x62D0 # <CJK> +0x89FC 0x6539 # <CJK> +0x8A40 0x9B41 # <CJK> +0x8A41 0x6666 # <CJK> +0x8A42 0x68B0 # <CJK> +0x8A43 0x6D77 # <CJK> +0x8A44 0x7070 # <CJK> +0x8A45 0x754C # <CJK> +0x8A46 0x7686 # <CJK> +0x8A47 0x7D75 # <CJK> +0x8A48 0x82A5 # <CJK> +0x8A49 0x87F9 # <CJK> +0x8A4A 0x958B # <CJK> +0x8A4B 0x968E # <CJK> +0x8A4C 0x8C9D # <CJK> +0x8A4D 0x51F1 # <CJK> +0x8A4E 0x52BE # <CJK> +0x8A4F 0x5916 # <CJK> +0x8A50 0x54B3 # <CJK> +0x8A51 0x5BB3 # <CJK> +0x8A52 0x5D16 # <CJK> +0x8A53 0x6168 # <CJK> +0x8A54 0x6982 # <CJK> +0x8A55 0x6DAF # <CJK> +0x8A56 0x788D # <CJK> +0x8A57 0x84CB # <CJK> +0x8A58 0x8857 # <CJK> +0x8A59 0x8A72 # <CJK> +0x8A5A 0x93A7 # <CJK> +0x8A5B 0x9AB8 # <CJK> +0x8A5C 0x6D6C # <CJK> +0x8A5D 0x99A8 # <CJK> +0x8A5E 0x86D9 # <CJK> +0x8A5F 0x57A3 # <CJK> +0x8A60 0x67FF # <CJK> +0x8A61 0x86CE # <CJK> +0x8A62 0x920E # <CJK> +0x8A63 0x5283 # <CJK> +0x8A64 0x5687 # <CJK> +0x8A65 0x5404 # <CJK> +0x8A66 0x5ED3 # <CJK> +0x8A67 0x62E1 # <CJK> +0x8A68 0x64B9 # <CJK> +0x8A69 0x683C # <CJK> +0x8A6A 0x6838 # <CJK> +0x8A6B 0x6BBB # <CJK> +0x8A6C 0x7372 # <CJK> +0x8A6D 0x78BA # <CJK> +0x8A6E 0x7A6B # <CJK> +0x8A6F 0x899A # <CJK> +0x8A70 0x89D2 # <CJK> +0x8A71 0x8D6B # <CJK> +0x8A72 0x8F03 # <CJK> +0x8A73 0x90ED # <CJK> +0x8A74 0x95A3 # <CJK> +0x8A75 0x9694 # <CJK> +0x8A76 0x9769 # <CJK> +0x8A77 0x5B66 # <CJK> +0x8A78 0x5CB3 # <CJK> +0x8A79 0x697D # <CJK> +0x8A7A 0x984D # <CJK> +0x8A7B 0x984E # <CJK> +0x8A7C 0x639B # <CJK> +0x8A7D 0x7B20 # <CJK> +0x8A7E 0x6A2B # <CJK> +0x8A80 0x6A7F # <CJK> +0x8A81 0x68B6 # <CJK> +0x8A82 0x9C0D # <CJK> +0x8A83 0x6F5F # <CJK> +0x8A84 0x5272 # <CJK> +0x8A85 0x559D # <CJK> +0x8A86 0x6070 # <CJK> +0x8A87 0x62EC # <CJK> +0x8A88 0x6D3B # <CJK> +0x8A89 0x6E07 # <CJK> +0x8A8A 0x6ED1 # <CJK> +0x8A8B 0x845B # <CJK> +0x8A8C 0x8910 # <CJK> +0x8A8D 0x8F44 # <CJK> +0x8A8E 0x4E14 # <CJK> +0x8A8F 0x9C39 # <CJK> +0x8A90 0x53F6 # <CJK> +0x8A91 0x691B # <CJK> +0x8A92 0x6A3A # <CJK> +0x8A93 0x9784 # <CJK> +0x8A94 0x682A # <CJK> +0x8A95 0x515C # <CJK> +0x8A96 0x7AC3 # <CJK> +0x8A97 0x84B2 # <CJK> +0x8A98 0x91DC # <CJK> +0x8A99 0x938C # <CJK> +0x8A9A 0x565B # <CJK> +0x8A9B 0x9D28 # <CJK> +0x8A9C 0x6822 # <CJK> +0x8A9D 0x8305 # <CJK> +0x8A9E 0x8431 # <CJK> +0x8A9F 0x7CA5 # <CJK> +0x8AA0 0x5208 # <CJK> +0x8AA1 0x82C5 # <CJK> +0x8AA2 0x74E6 # <CJK> +0x8AA3 0x4E7E # <CJK> +0x8AA4 0x4F83 # <CJK> +0x8AA5 0x51A0 # <CJK> +0x8AA6 0x5BD2 # <CJK> +0x8AA7 0x520A # <CJK> +0x8AA8 0x52D8 # <CJK> +0x8AA9 0x52E7 # <CJK> +0x8AAA 0x5DFB # <CJK> +0x8AAB 0x559A # <CJK> +0x8AAC 0x582A # <CJK> +0x8AAD 0x59E6 # <CJK> +0x8AAE 0x5B8C # <CJK> +0x8AAF 0x5B98 # <CJK> +0x8AB0 0x5BDB # <CJK> +0x8AB1 0x5E72 # <CJK> +0x8AB2 0x5E79 # <CJK> +0x8AB3 0x60A3 # <CJK> +0x8AB4 0x611F # <CJK> +0x8AB5 0x6163 # <CJK> +0x8AB6 0x61BE # <CJK> +0x8AB7 0x63DB # <CJK> +0x8AB8 0x6562 # <CJK> +0x8AB9 0x67D1 # <CJK> +0x8ABA 0x6853 # <CJK> +0x8ABB 0x68FA # <CJK> +0x8ABC 0x6B3E # <CJK> +0x8ABD 0x6B53 # <CJK> +0x8ABE 0x6C57 # <CJK> +0x8ABF 0x6F22 # <CJK> +0x8AC0 0x6F97 # <CJK> +0x8AC1 0x6F45 # <CJK> +0x8AC2 0x74B0 # <CJK> +0x8AC3 0x7518 # <CJK> +0x8AC4 0x76E3 # <CJK> +0x8AC5 0x770B # <CJK> +0x8AC6 0x7AFF # <CJK> +0x8AC7 0x7BA1 # <CJK> +0x8AC8 0x7C21 # <CJK> +0x8AC9 0x7DE9 # <CJK> +0x8ACA 0x7F36 # <CJK> +0x8ACB 0x7FF0 # <CJK> +0x8ACC 0x809D # <CJK> +0x8ACD 0x8266 # <CJK> +0x8ACE 0x839E # <CJK> +0x8ACF 0x89B3 # <CJK> +0x8AD0 0x8ACC # <CJK> +0x8AD1 0x8CAB # <CJK> +0x8AD2 0x9084 # <CJK> +0x8AD3 0x9451 # <CJK> +0x8AD4 0x9593 # <CJK> +0x8AD5 0x9591 # <CJK> +0x8AD6 0x95A2 # <CJK> +0x8AD7 0x9665 # <CJK> +0x8AD8 0x97D3 # <CJK> +0x8AD9 0x9928 # <CJK> +0x8ADA 0x8218 # <CJK> +0x8ADB 0x4E38 # <CJK> +0x8ADC 0x542B # <CJK> +0x8ADD 0x5CB8 # <CJK> +0x8ADE 0x5DCC # <CJK> +0x8ADF 0x73A9 # <CJK> +0x8AE0 0x764C # <CJK> +0x8AE1 0x773C # <CJK> +0x8AE2 0x5CA9 # <CJK> +0x8AE3 0x7FEB # <CJK> +0x8AE4 0x8D0B # <CJK> +0x8AE5 0x96C1 # <CJK> +0x8AE6 0x9811 # <CJK> +0x8AE7 0x9854 # <CJK> +0x8AE8 0x9858 # <CJK> +0x8AE9 0x4F01 # <CJK> +0x8AEA 0x4F0E # <CJK> +0x8AEB 0x5371 # <CJK> +0x8AEC 0x559C # <CJK> +0x8AED 0x5668 # <CJK> +0x8AEE 0x57FA # <CJK> +0x8AEF 0x5947 # <CJK> +0x8AF0 0x5B09 # <CJK> +0x8AF1 0x5BC4 # <CJK> +0x8AF2 0x5C90 # <CJK> +0x8AF3 0x5E0C # <CJK> +0x8AF4 0x5E7E # <CJK> +0x8AF5 0x5FCC # <CJK> +0x8AF6 0x63EE # <CJK> +0x8AF7 0x673A # <CJK> +0x8AF8 0x65D7 # <CJK> +0x8AF9 0x65E2 # <CJK> +0x8AFA 0x671F # <CJK> +0x8AFB 0x68CB # <CJK> +0x8AFC 0x68C4 # <CJK> +0x8B40 0x6A5F # <CJK> +0x8B41 0x5E30 # <CJK> +0x8B42 0x6BC5 # <CJK> +0x8B43 0x6C17 # <CJK> +0x8B44 0x6C7D # <CJK> +0x8B45 0x757F # <CJK> +0x8B46 0x7948 # <CJK> +0x8B47 0x5B63 # <CJK> +0x8B48 0x7A00 # <CJK> +0x8B49 0x7D00 # <CJK> +0x8B4A 0x5FBD # <CJK> +0x8B4B 0x898F # <CJK> +0x8B4C 0x8A18 # <CJK> +0x8B4D 0x8CB4 # <CJK> +0x8B4E 0x8D77 # <CJK> +0x8B4F 0x8ECC # <CJK> +0x8B50 0x8F1D # <CJK> +0x8B51 0x98E2 # <CJK> +0x8B52 0x9A0E # <CJK> +0x8B53 0x9B3C # <CJK> +0x8B54 0x4E80 # <CJK> +0x8B55 0x507D # <CJK> +0x8B56 0x5100 # <CJK> +0x8B57 0x5993 # <CJK> +0x8B58 0x5B9C # <CJK> +0x8B59 0x622F # <CJK> +0x8B5A 0x6280 # <CJK> +0x8B5B 0x64EC # <CJK> +0x8B5C 0x6B3A # <CJK> +0x8B5D 0x72A0 # <CJK> +0x8B5E 0x7591 # <CJK> +0x8B5F 0x7947 # <CJK> +0x8B60 0x7FA9 # <CJK> +0x8B61 0x87FB # <CJK> +0x8B62 0x8ABC # <CJK> +0x8B63 0x8B70 # <CJK> +0x8B64 0x63AC # <CJK> +0x8B65 0x83CA # <CJK> +0x8B66 0x97A0 # <CJK> +0x8B67 0x5409 # <CJK> +0x8B68 0x5403 # <CJK> +0x8B69 0x55AB # <CJK> +0x8B6A 0x6854 # <CJK> +0x8B6B 0x6A58 # <CJK> +0x8B6C 0x8A70 # <CJK> +0x8B6D 0x7827 # <CJK> +0x8B6E 0x6775 # <CJK> +0x8B6F 0x9ECD # <CJK> +0x8B70 0x5374 # <CJK> +0x8B71 0x5BA2 # <CJK> +0x8B72 0x811A # <CJK> +0x8B73 0x8650 # <CJK> +0x8B74 0x9006 # <CJK> +0x8B75 0x4E18 # <CJK> +0x8B76 0x4E45 # <CJK> +0x8B77 0x4EC7 # <CJK> +0x8B78 0x4F11 # <CJK> +0x8B79 0x53CA # <CJK> +0x8B7A 0x5438 # <CJK> +0x8B7B 0x5BAE # <CJK> +0x8B7C 0x5F13 # <CJK> +0x8B7D 0x6025 # <CJK> +0x8B7E 0x6551 # <CJK> +0x8B80 0x673D # <CJK> +0x8B81 0x6C42 # <CJK> +0x8B82 0x6C72 # <CJK> +0x8B83 0x6CE3 # <CJK> +0x8B84 0x7078 # <CJK> +0x8B85 0x7403 # <CJK> +0x8B86 0x7A76 # <CJK> +0x8B87 0x7AAE # <CJK> +0x8B88 0x7B08 # <CJK> +0x8B89 0x7D1A # <CJK> +0x8B8A 0x7CFE # <CJK> +0x8B8B 0x7D66 # <CJK> +0x8B8C 0x65E7 # <CJK> +0x8B8D 0x725B # <CJK> +0x8B8E 0x53BB # <CJK> +0x8B8F 0x5C45 # <CJK> +0x8B90 0x5DE8 # <CJK> +0x8B91 0x62D2 # <CJK> +0x8B92 0x62E0 # <CJK> +0x8B93 0x6319 # <CJK> +0x8B94 0x6E20 # <CJK> +0x8B95 0x865A # <CJK> +0x8B96 0x8A31 # <CJK> +0x8B97 0x8DDD # <CJK> +0x8B98 0x92F8 # <CJK> +0x8B99 0x6F01 # <CJK> +0x8B9A 0x79A6 # <CJK> +0x8B9B 0x9B5A # <CJK> +0x8B9C 0x4EA8 # <CJK> +0x8B9D 0x4EAB # <CJK> +0x8B9E 0x4EAC # <CJK> +0x8B9F 0x4F9B # <CJK> +0x8BA0 0x4FA0 # <CJK> +0x8BA1 0x50D1 # <CJK> +0x8BA2 0x5147 # <CJK> +0x8BA3 0x7AF6 # <CJK> +0x8BA4 0x5171 # <CJK> +0x8BA5 0x51F6 # <CJK> +0x8BA6 0x5354 # <CJK> +0x8BA7 0x5321 # <CJK> +0x8BA8 0x537F # <CJK> +0x8BA9 0x53EB # <CJK> +0x8BAA 0x55AC # <CJK> +0x8BAB 0x5883 # <CJK> +0x8BAC 0x5CE1 # <CJK> +0x8BAD 0x5F37 # <CJK> +0x8BAE 0x5F4A # <CJK> +0x8BAF 0x602F # <CJK> +0x8BB0 0x6050 # <CJK> +0x8BB1 0x606D # <CJK> +0x8BB2 0x631F # <CJK> +0x8BB3 0x6559 # <CJK> +0x8BB4 0x6A4B # <CJK> +0x8BB5 0x6CC1 # <CJK> +0x8BB6 0x72C2 # <CJK> +0x8BB7 0x72ED # <CJK> +0x8BB8 0x77EF # <CJK> +0x8BB9 0x80F8 # <CJK> +0x8BBA 0x8105 # <CJK> +0x8BBB 0x8208 # <CJK> +0x8BBC 0x854E # <CJK> +0x8BBD 0x90F7 # <CJK> +0x8BBE 0x93E1 # <CJK> +0x8BBF 0x97FF # <CJK> +0x8BC0 0x9957 # <CJK> +0x8BC1 0x9A5A # <CJK> +0x8BC2 0x4EF0 # <CJK> +0x8BC3 0x51DD # <CJK> +0x8BC4 0x5C2D # <CJK> +0x8BC5 0x6681 # <CJK> +0x8BC6 0x696D # <CJK> +0x8BC7 0x5C40 # <CJK> +0x8BC8 0x66F2 # <CJK> +0x8BC9 0x6975 # <CJK> +0x8BCA 0x7389 # <CJK> +0x8BCB 0x6850 # <CJK> +0x8BCC 0x7C81 # <CJK> +0x8BCD 0x50C5 # <CJK> +0x8BCE 0x52E4 # <CJK> +0x8BCF 0x5747 # <CJK> +0x8BD0 0x5DFE # <CJK> +0x8BD1 0x9326 # <CJK> +0x8BD2 0x65A4 # <CJK> +0x8BD3 0x6B23 # <CJK> +0x8BD4 0x6B3D # <CJK> +0x8BD5 0x7434 # <CJK> +0x8BD6 0x7981 # <CJK> +0x8BD7 0x79BD # <CJK> +0x8BD8 0x7B4B # <CJK> +0x8BD9 0x7DCA # <CJK> +0x8BDA 0x82B9 # <CJK> +0x8BDB 0x83CC # <CJK> +0x8BDC 0x887F # <CJK> +0x8BDD 0x895F # <CJK> +0x8BDE 0x8B39 # <CJK> +0x8BDF 0x8FD1 # <CJK> +0x8BE0 0x91D1 # <CJK> +0x8BE1 0x541F # <CJK> +0x8BE2 0x9280 # <CJK> +0x8BE3 0x4E5D # <CJK> +0x8BE4 0x5036 # <CJK> +0x8BE5 0x53E5 # <CJK> +0x8BE6 0x533A # <CJK> +0x8BE7 0x72D7 # <CJK> +0x8BE8 0x7396 # <CJK> +0x8BE9 0x77E9 # <CJK> +0x8BEA 0x82E6 # <CJK> +0x8BEB 0x8EAF # <CJK> +0x8BEC 0x99C6 # <CJK> +0x8BED 0x99C8 # <CJK> +0x8BEE 0x99D2 # <CJK> +0x8BEF 0x5177 # <CJK> +0x8BF0 0x611A # <CJK> +0x8BF1 0x865E # <CJK> +0x8BF2 0x55B0 # <CJK> +0x8BF3 0x7A7A # <CJK> +0x8BF4 0x5076 # <CJK> +0x8BF5 0x5BD3 # <CJK> +0x8BF6 0x9047 # <CJK> +0x8BF7 0x9685 # <CJK> +0x8BF8 0x4E32 # <CJK> +0x8BF9 0x6ADB # <CJK> +0x8BFA 0x91E7 # <CJK> +0x8BFB 0x5C51 # <CJK> +0x8BFC 0x5C48 # <CJK> +0x8C40 0x6398 # <CJK> +0x8C41 0x7A9F # <CJK> +0x8C42 0x6C93 # <CJK> +0x8C43 0x9774 # <CJK> +0x8C44 0x8F61 # <CJK> +0x8C45 0x7AAA # <CJK> +0x8C46 0x718A # <CJK> +0x8C47 0x9688 # <CJK> +0x8C48 0x7C82 # <CJK> +0x8C49 0x6817 # <CJK> +0x8C4A 0x7E70 # <CJK> +0x8C4B 0x6851 # <CJK> +0x8C4C 0x936C # <CJK> +0x8C4D 0x52F2 # <CJK> +0x8C4E 0x541B # <CJK> +0x8C4F 0x85AB # <CJK> +0x8C50 0x8A13 # <CJK> +0x8C51 0x7FA4 # <CJK> +0x8C52 0x8ECD # <CJK> +0x8C53 0x90E1 # <CJK> +0x8C54 0x5366 # <CJK> +0x8C55 0x8888 # <CJK> +0x8C56 0x7941 # <CJK> +0x8C57 0x4FC2 # <CJK> +0x8C58 0x50BE # <CJK> +0x8C59 0x5211 # <CJK> +0x8C5A 0x5144 # <CJK> +0x8C5B 0x5553 # <CJK> +0x8C5C 0x572D # <CJK> +0x8C5D 0x73EA # <CJK> +0x8C5E 0x578B # <CJK> +0x8C5F 0x5951 # <CJK> +0x8C60 0x5F62 # <CJK> +0x8C61 0x5F84 # <CJK> +0x8C62 0x6075 # <CJK> +0x8C63 0x6176 # <CJK> +0x8C64 0x6167 # <CJK> +0x8C65 0x61A9 # <CJK> +0x8C66 0x63B2 # <CJK> +0x8C67 0x643A # <CJK> +0x8C68 0x656C # <CJK> +0x8C69 0x666F # <CJK> +0x8C6A 0x6842 # <CJK> +0x8C6B 0x6E13 # <CJK> +0x8C6C 0x7566 # <CJK> +0x8C6D 0x7A3D # <CJK> +0x8C6E 0x7CFB # <CJK> +0x8C6F 0x7D4C # <CJK> +0x8C70 0x7D99 # <CJK> +0x8C71 0x7E4B # <CJK> +0x8C72 0x7F6B # <CJK> +0x8C73 0x830E # <CJK> +0x8C74 0x834A # <CJK> +0x8C75 0x86CD # <CJK> +0x8C76 0x8A08 # <CJK> +0x8C77 0x8A63 # <CJK> +0x8C78 0x8B66 # <CJK> +0x8C79 0x8EFD # <CJK> +0x8C7A 0x981A # <CJK> +0x8C7B 0x9D8F # <CJK> +0x8C7C 0x82B8 # <CJK> +0x8C7D 0x8FCE # <CJK> +0x8C7E 0x9BE8 # <CJK> +0x8C80 0x5287 # <CJK> +0x8C81 0x621F # <CJK> +0x8C82 0x6483 # <CJK> +0x8C83 0x6FC0 # <CJK> +0x8C84 0x9699 # <CJK> +0x8C85 0x6841 # <CJK> +0x8C86 0x5091 # <CJK> +0x8C87 0x6B20 # <CJK> +0x8C88 0x6C7A # <CJK> +0x8C89 0x6F54 # <CJK> +0x8C8A 0x7A74 # <CJK> +0x8C8B 0x7D50 # <CJK> +0x8C8C 0x8840 # <CJK> +0x8C8D 0x8A23 # <CJK> +0x8C8E 0x6708 # <CJK> +0x8C8F 0x4EF6 # <CJK> +0x8C90 0x5039 # <CJK> +0x8C91 0x5026 # <CJK> +0x8C92 0x5065 # <CJK> +0x8C93 0x517C # <CJK> +0x8C94 0x5238 # <CJK> +0x8C95 0x5263 # <CJK> +0x8C96 0x55A7 # <CJK> +0x8C97 0x570F # <CJK> +0x8C98 0x5805 # <CJK> +0x8C99 0x5ACC # <CJK> +0x8C9A 0x5EFA # <CJK> +0x8C9B 0x61B2 # <CJK> +0x8C9C 0x61F8 # <CJK> +0x8C9D 0x62F3 # <CJK> +0x8C9E 0x6372 # <CJK> +0x8C9F 0x691C # <CJK> +0x8CA0 0x6A29 # <CJK> +0x8CA1 0x727D # <CJK> +0x8CA2 0x72AC # <CJK> +0x8CA3 0x732E # <CJK> +0x8CA4 0x7814 # <CJK> +0x8CA5 0x786F # <CJK> +0x8CA6 0x7D79 # <CJK> +0x8CA7 0x770C # <CJK> +0x8CA8 0x80A9 # <CJK> +0x8CA9 0x898B # <CJK> +0x8CAA 0x8B19 # <CJK> +0x8CAB 0x8CE2 # <CJK> +0x8CAC 0x8ED2 # <CJK> +0x8CAD 0x9063 # <CJK> +0x8CAE 0x9375 # <CJK> +0x8CAF 0x967A # <CJK> +0x8CB0 0x9855 # <CJK> +0x8CB1 0x9A13 # <CJK> +0x8CB2 0x9E78 # <CJK> +0x8CB3 0x5143 # <CJK> +0x8CB4 0x539F # <CJK> +0x8CB5 0x53B3 # <CJK> +0x8CB6 0x5E7B # <CJK> +0x8CB7 0x5F26 # <CJK> +0x8CB8 0x6E1B # <CJK> +0x8CB9 0x6E90 # <CJK> +0x8CBA 0x7384 # <CJK> +0x8CBB 0x73FE # <CJK> +0x8CBC 0x7D43 # <CJK> +0x8CBD 0x8237 # <CJK> +0x8CBE 0x8A00 # <CJK> +0x8CBF 0x8AFA # <CJK> +0x8CC0 0x9650 # <CJK> +0x8CC1 0x4E4E # <CJK> +0x8CC2 0x500B # <CJK> +0x8CC3 0x53E4 # <CJK> +0x8CC4 0x547C # <CJK> +0x8CC5 0x56FA # <CJK> +0x8CC6 0x59D1 # <CJK> +0x8CC7 0x5B64 # <CJK> +0x8CC8 0x5DF1 # <CJK> +0x8CC9 0x5EAB # <CJK> +0x8CCA 0x5F27 # <CJK> +0x8CCB 0x6238 # <CJK> +0x8CCC 0x6545 # <CJK> +0x8CCD 0x67AF # <CJK> +0x8CCE 0x6E56 # <CJK> +0x8CCF 0x72D0 # <CJK> +0x8CD0 0x7CCA # <CJK> +0x8CD1 0x88B4 # <CJK> +0x8CD2 0x80A1 # <CJK> +0x8CD3 0x80E1 # <CJK> +0x8CD4 0x83F0 # <CJK> +0x8CD5 0x864E # <CJK> +0x8CD6 0x8A87 # <CJK> +0x8CD7 0x8DE8 # <CJK> +0x8CD8 0x9237 # <CJK> +0x8CD9 0x96C7 # <CJK> +0x8CDA 0x9867 # <CJK> +0x8CDB 0x9F13 # <CJK> +0x8CDC 0x4E94 # <CJK> +0x8CDD 0x4E92 # <CJK> +0x8CDE 0x4F0D # <CJK> +0x8CDF 0x5348 # <CJK> +0x8CE0 0x5449 # <CJK> +0x8CE1 0x543E # <CJK> +0x8CE2 0x5A2F # <CJK> +0x8CE3 0x5F8C # <CJK> +0x8CE4 0x5FA1 # <CJK> +0x8CE5 0x609F # <CJK> +0x8CE6 0x68A7 # <CJK> +0x8CE7 0x6A8E # <CJK> +0x8CE8 0x745A # <CJK> +0x8CE9 0x7881 # <CJK> +0x8CEA 0x8A9E # <CJK> +0x8CEB 0x8AA4 # <CJK> +0x8CEC 0x8B77 # <CJK> +0x8CED 0x9190 # <CJK> +0x8CEE 0x4E5E # <CJK> +0x8CEF 0x9BC9 # <CJK> +0x8CF0 0x4EA4 # <CJK> +0x8CF1 0x4F7C # <CJK> +0x8CF2 0x4FAF # <CJK> +0x8CF3 0x5019 # <CJK> +0x8CF4 0x5016 # <CJK> +0x8CF5 0x5149 # <CJK> +0x8CF6 0x516C # <CJK> +0x8CF7 0x529F # <CJK> +0x8CF8 0x52B9 # <CJK> +0x8CF9 0x52FE # <CJK> +0x8CFA 0x539A # <CJK> +0x8CFB 0x53E3 # <CJK> +0x8CFC 0x5411 # <CJK> +0x8D40 0x540E # <CJK> +0x8D41 0x5589 # <CJK> +0x8D42 0x5751 # <CJK> +0x8D43 0x57A2 # <CJK> +0x8D44 0x597D # <CJK> +0x8D45 0x5B54 # <CJK> +0x8D46 0x5B5D # <CJK> +0x8D47 0x5B8F # <CJK> +0x8D48 0x5DE5 # <CJK> +0x8D49 0x5DE7 # <CJK> +0x8D4A 0x5DF7 # <CJK> +0x8D4B 0x5E78 # <CJK> +0x8D4C 0x5E83 # <CJK> +0x8D4D 0x5E9A # <CJK> +0x8D4E 0x5EB7 # <CJK> +0x8D4F 0x5F18 # <CJK> +0x8D50 0x6052 # <CJK> +0x8D51 0x614C # <CJK> +0x8D52 0x6297 # <CJK> +0x8D53 0x62D8 # <CJK> +0x8D54 0x63A7 # <CJK> +0x8D55 0x653B # <CJK> +0x8D56 0x6602 # <CJK> +0x8D57 0x6643 # <CJK> +0x8D58 0x66F4 # <CJK> +0x8D59 0x676D # <CJK> +0x8D5A 0x6821 # <CJK> +0x8D5B 0x6897 # <CJK> +0x8D5C 0x69CB # <CJK> +0x8D5D 0x6C5F # <CJK> +0x8D5E 0x6D2A # <CJK> +0x8D5F 0x6D69 # <CJK> +0x8D60 0x6E2F # <CJK> +0x8D61 0x6E9D # <CJK> +0x8D62 0x7532 # <CJK> +0x8D63 0x7687 # <CJK> +0x8D64 0x786C # <CJK> +0x8D65 0x7A3F # <CJK> +0x8D66 0x7CE0 # <CJK> +0x8D67 0x7D05 # <CJK> +0x8D68 0x7D18 # <CJK> +0x8D69 0x7D5E # <CJK> +0x8D6A 0x7DB1 # <CJK> +0x8D6B 0x8015 # <CJK> +0x8D6C 0x8003 # <CJK> +0x8D6D 0x80AF # <CJK> +0x8D6E 0x80B1 # <CJK> +0x8D6F 0x8154 # <CJK> +0x8D70 0x818F # <CJK> +0x8D71 0x822A # <CJK> +0x8D72 0x8352 # <CJK> +0x8D73 0x884C # <CJK> +0x8D74 0x8861 # <CJK> +0x8D75 0x8B1B # <CJK> +0x8D76 0x8CA2 # <CJK> +0x8D77 0x8CFC # <CJK> +0x8D78 0x90CA # <CJK> +0x8D79 0x9175 # <CJK> +0x8D7A 0x9271 # <CJK> +0x8D7B 0x783F # <CJK> +0x8D7C 0x92FC # <CJK> +0x8D7D 0x95A4 # <CJK> +0x8D7E 0x964D # <CJK> +0x8D80 0x9805 # <CJK> +0x8D81 0x9999 # <CJK> +0x8D82 0x9AD8 # <CJK> +0x8D83 0x9D3B # <CJK> +0x8D84 0x525B # <CJK> +0x8D85 0x52AB # <CJK> +0x8D86 0x53F7 # <CJK> +0x8D87 0x5408 # <CJK> +0x8D88 0x58D5 # <CJK> +0x8D89 0x62F7 # <CJK> +0x8D8A 0x6FE0 # <CJK> +0x8D8B 0x8C6A # <CJK> +0x8D8C 0x8F5F # <CJK> +0x8D8D 0x9EB9 # <CJK> +0x8D8E 0x514B # <CJK> +0x8D8F 0x523B # <CJK> +0x8D90 0x544A # <CJK> +0x8D91 0x56FD # <CJK> +0x8D92 0x7A40 # <CJK> +0x8D93 0x9177 # <CJK> +0x8D94 0x9D60 # <CJK> +0x8D95 0x9ED2 # <CJK> +0x8D96 0x7344 # <CJK> +0x8D97 0x6F09 # <CJK> +0x8D98 0x8170 # <CJK> +0x8D99 0x7511 # <CJK> +0x8D9A 0x5FFD # <CJK> +0x8D9B 0x60DA # <CJK> +0x8D9C 0x9AA8 # <CJK> +0x8D9D 0x72DB # <CJK> +0x8D9E 0x8FBC # <CJK> +0x8D9F 0x6B64 # <CJK> +0x8DA0 0x9803 # <CJK> +0x8DA1 0x4ECA # <CJK> +0x8DA2 0x56F0 # <CJK> +0x8DA3 0x5764 # <CJK> +0x8DA4 0x58BE # <CJK> +0x8DA5 0x5A5A # <CJK> +0x8DA6 0x6068 # <CJK> +0x8DA7 0x61C7 # <CJK> +0x8DA8 0x660F # <CJK> +0x8DA9 0x6606 # <CJK> +0x8DAA 0x6839 # <CJK> +0x8DAB 0x68B1 # <CJK> +0x8DAC 0x6DF7 # <CJK> +0x8DAD 0x75D5 # <CJK> +0x8DAE 0x7D3A # <CJK> +0x8DAF 0x826E # <CJK> +0x8DB0 0x9B42 # <CJK> +0x8DB1 0x4E9B # <CJK> +0x8DB2 0x4F50 # <CJK> +0x8DB3 0x53C9 # <CJK> +0x8DB4 0x5506 # <CJK> +0x8DB5 0x5D6F # <CJK> +0x8DB6 0x5DE6 # <CJK> +0x8DB7 0x5DEE # <CJK> +0x8DB8 0x67FB # <CJK> +0x8DB9 0x6C99 # <CJK> +0x8DBA 0x7473 # <CJK> +0x8DBB 0x7802 # <CJK> +0x8DBC 0x8A50 # <CJK> +0x8DBD 0x9396 # <CJK> +0x8DBE 0x88DF # <CJK> +0x8DBF 0x5750 # <CJK> +0x8DC0 0x5EA7 # <CJK> +0x8DC1 0x632B # <CJK> +0x8DC2 0x50B5 # <CJK> +0x8DC3 0x50AC # <CJK> +0x8DC4 0x518D # <CJK> +0x8DC5 0x6700 # <CJK> +0x8DC6 0x54C9 # <CJK> +0x8DC7 0x585E # <CJK> +0x8DC8 0x59BB # <CJK> +0x8DC9 0x5BB0 # <CJK> +0x8DCA 0x5F69 # <CJK> +0x8DCB 0x624D # <CJK> +0x8DCC 0x63A1 # <CJK> +0x8DCD 0x683D # <CJK> +0x8DCE 0x6B73 # <CJK> +0x8DCF 0x6E08 # <CJK> +0x8DD0 0x707D # <CJK> +0x8DD1 0x91C7 # <CJK> +0x8DD2 0x7280 # <CJK> +0x8DD3 0x7815 # <CJK> +0x8DD4 0x7826 # <CJK> +0x8DD5 0x796D # <CJK> +0x8DD6 0x658E # <CJK> +0x8DD7 0x7D30 # <CJK> +0x8DD8 0x83DC # <CJK> +0x8DD9 0x88C1 # <CJK> +0x8DDA 0x8F09 # <CJK> +0x8DDB 0x969B # <CJK> +0x8DDC 0x5264 # <CJK> +0x8DDD 0x5728 # <CJK> +0x8DDE 0x6750 # <CJK> +0x8DDF 0x7F6A # <CJK> +0x8DE0 0x8CA1 # <CJK> +0x8DE1 0x51B4 # <CJK> +0x8DE2 0x5742 # <CJK> +0x8DE3 0x962A # <CJK> +0x8DE4 0x583A # <CJK> +0x8DE5 0x698A # <CJK> +0x8DE6 0x80B4 # <CJK> +0x8DE7 0x54B2 # <CJK> +0x8DE8 0x5D0E # <CJK> +0x8DE9 0x57FC # <CJK> +0x8DEA 0x7895 # <CJK> +0x8DEB 0x9DFA # <CJK> +0x8DEC 0x4F5C # <CJK> +0x8DED 0x524A # <CJK> +0x8DEE 0x548B # <CJK> +0x8DEF 0x643E # <CJK> +0x8DF0 0x6628 # <CJK> +0x8DF1 0x6714 # <CJK> +0x8DF2 0x67F5 # <CJK> +0x8DF3 0x7A84 # <CJK> +0x8DF4 0x7B56 # <CJK> +0x8DF5 0x7D22 # <CJK> +0x8DF6 0x932F # <CJK> +0x8DF7 0x685C # <CJK> +0x8DF8 0x9BAD # <CJK> +0x8DF9 0x7B39 # <CJK> +0x8DFA 0x5319 # <CJK> +0x8DFB 0x518A # <CJK> +0x8DFC 0x5237 # <CJK> +0x8E40 0x5BDF # <CJK> +0x8E41 0x62F6 # <CJK> +0x8E42 0x64AE # <CJK> +0x8E43 0x64E6 # <CJK> +0x8E44 0x672D # <CJK> +0x8E45 0x6BBA # <CJK> +0x8E46 0x85A9 # <CJK> +0x8E47 0x96D1 # <CJK> +0x8E48 0x7690 # <CJK> +0x8E49 0x9BD6 # <CJK> +0x8E4A 0x634C # <CJK> +0x8E4B 0x9306 # <CJK> +0x8E4C 0x9BAB # <CJK> +0x8E4D 0x76BF # <CJK> +0x8E4E 0x6652 # <CJK> +0x8E4F 0x4E09 # <CJK> +0x8E50 0x5098 # <CJK> +0x8E51 0x53C2 # <CJK> +0x8E52 0x5C71 # <CJK> +0x8E53 0x60E8 # <CJK> +0x8E54 0x6492 # <CJK> +0x8E55 0x6563 # <CJK> +0x8E56 0x685F # <CJK> +0x8E57 0x71E6 # <CJK> +0x8E58 0x73CA # <CJK> +0x8E59 0x7523 # <CJK> +0x8E5A 0x7B97 # <CJK> +0x8E5B 0x7E82 # <CJK> +0x8E5C 0x8695 # <CJK> +0x8E5D 0x8B83 # <CJK> +0x8E5E 0x8CDB # <CJK> +0x8E5F 0x9178 # <CJK> +0x8E60 0x9910 # <CJK> +0x8E61 0x65AC # <CJK> +0x8E62 0x66AB # <CJK> +0x8E63 0x6B8B # <CJK> +0x8E64 0x4ED5 # <CJK> +0x8E65 0x4ED4 # <CJK> +0x8E66 0x4F3A # <CJK> +0x8E67 0x4F7F # <CJK> +0x8E68 0x523A # <CJK> +0x8E69 0x53F8 # <CJK> +0x8E6A 0x53F2 # <CJK> +0x8E6B 0x55E3 # <CJK> +0x8E6C 0x56DB # <CJK> +0x8E6D 0x58EB # <CJK> +0x8E6E 0x59CB # <CJK> +0x8E6F 0x59C9 # <CJK> +0x8E70 0x59FF # <CJK> +0x8E71 0x5B50 # <CJK> +0x8E72 0x5C4D # <CJK> +0x8E73 0x5E02 # <CJK> +0x8E74 0x5E2B # <CJK> +0x8E75 0x5FD7 # <CJK> +0x8E76 0x601D # <CJK> +0x8E77 0x6307 # <CJK> +0x8E78 0x652F # <CJK> +0x8E79 0x5B5C # <CJK> +0x8E7A 0x65AF # <CJK> +0x8E7B 0x65BD # <CJK> +0x8E7C 0x65E8 # <CJK> +0x8E7D 0x679D # <CJK> +0x8E7E 0x6B62 # <CJK> +0x8E80 0x6B7B # <CJK> +0x8E81 0x6C0F # <CJK> +0x8E82 0x7345 # <CJK> +0x8E83 0x7949 # <CJK> +0x8E84 0x79C1 # <CJK> +0x8E85 0x7CF8 # <CJK> +0x8E86 0x7D19 # <CJK> +0x8E87 0x7D2B # <CJK> +0x8E88 0x80A2 # <CJK> +0x8E89 0x8102 # <CJK> +0x8E8A 0x81F3 # <CJK> +0x8E8B 0x8996 # <CJK> +0x8E8C 0x8A5E # <CJK> +0x8E8D 0x8A69 # <CJK> +0x8E8E 0x8A66 # <CJK> +0x8E8F 0x8A8C # <CJK> +0x8E90 0x8AEE # <CJK> +0x8E91 0x8CC7 # <CJK> +0x8E92 0x8CDC # <CJK> +0x8E93 0x96CC # <CJK> +0x8E94 0x98FC # <CJK> +0x8E95 0x6B6F # <CJK> +0x8E96 0x4E8B # <CJK> +0x8E97 0x4F3C # <CJK> +0x8E98 0x4F8D # <CJK> +0x8E99 0x5150 # <CJK> +0x8E9A 0x5B57 # <CJK> +0x8E9B 0x5BFA # <CJK> +0x8E9C 0x6148 # <CJK> +0x8E9D 0x6301 # <CJK> +0x8E9E 0x6642 # <CJK> +0x8E9F 0x6B21 # <CJK> +0x8EA0 0x6ECB # <CJK> +0x8EA1 0x6CBB # <CJK> +0x8EA2 0x723E # <CJK> +0x8EA3 0x74BD # <CJK> +0x8EA4 0x75D4 # <CJK> +0x8EA5 0x78C1 # <CJK> +0x8EA6 0x793A # <CJK> +0x8EA7 0x800C # <CJK> +0x8EA8 0x8033 # <CJK> +0x8EA9 0x81EA # <CJK> +0x8EAA 0x8494 # <CJK> +0x8EAB 0x8F9E # <CJK> +0x8EAC 0x6C50 # <CJK> +0x8EAD 0x9E7F # <CJK> +0x8EAE 0x5F0F # <CJK> +0x8EAF 0x8B58 # <CJK> +0x8EB0 0x9D2B # <CJK> +0x8EB1 0x7AFA # <CJK> +0x8EB2 0x8EF8 # <CJK> +0x8EB3 0x5B8D # <CJK> +0x8EB4 0x96EB # <CJK> +0x8EB5 0x4E03 # <CJK> +0x8EB6 0x53F1 # <CJK> +0x8EB7 0x57F7 # <CJK> +0x8EB8 0x5931 # <CJK> +0x8EB9 0x5AC9 # <CJK> +0x8EBA 0x5BA4 # <CJK> +0x8EBB 0x6089 # <CJK> +0x8EBC 0x6E7F # <CJK> +0x8EBD 0x6F06 # <CJK> +0x8EBE 0x75BE # <CJK> +0x8EBF 0x8CEA # <CJK> +0x8EC0 0x5B9F # <CJK> +0x8EC1 0x8500 # <CJK> +0x8EC2 0x7BE0 # <CJK> +0x8EC3 0x5072 # <CJK> +0x8EC4 0x67F4 # <CJK> +0x8EC5 0x829D # <CJK> +0x8EC6 0x5C61 # <CJK> +0x8EC7 0x854A # <CJK> +0x8EC8 0x7E1E # <CJK> +0x8EC9 0x820E # <CJK> +0x8ECA 0x5199 # <CJK> +0x8ECB 0x5C04 # <CJK> +0x8ECC 0x6368 # <CJK> +0x8ECD 0x8D66 # <CJK> +0x8ECE 0x659C # <CJK> +0x8ECF 0x716E # <CJK> +0x8ED0 0x793E # <CJK> +0x8ED1 0x7D17 # <CJK> +0x8ED2 0x8005 # <CJK> +0x8ED3 0x8B1D # <CJK> +0x8ED4 0x8ECA # <CJK> +0x8ED5 0x906E # <CJK> +0x8ED6 0x86C7 # <CJK> +0x8ED7 0x90AA # <CJK> +0x8ED8 0x501F # <CJK> +0x8ED9 0x52FA # <CJK> +0x8EDA 0x5C3A # <CJK> +0x8EDB 0x6753 # <CJK> +0x8EDC 0x707C # <CJK> +0x8EDD 0x7235 # <CJK> +0x8EDE 0x914C # <CJK> +0x8EDF 0x91C8 # <CJK> +0x8EE0 0x932B # <CJK> +0x8EE1 0x82E5 # <CJK> +0x8EE2 0x5BC2 # <CJK> +0x8EE3 0x5F31 # <CJK> +0x8EE4 0x60F9 # <CJK> +0x8EE5 0x4E3B # <CJK> +0x8EE6 0x53D6 # <CJK> +0x8EE7 0x5B88 # <CJK> +0x8EE8 0x624B # <CJK> +0x8EE9 0x6731 # <CJK> +0x8EEA 0x6B8A # <CJK> +0x8EEB 0x72E9 # <CJK> +0x8EEC 0x73E0 # <CJK> +0x8EED 0x7A2E # <CJK> +0x8EEE 0x816B # <CJK> +0x8EEF 0x8DA3 # <CJK> +0x8EF0 0x9152 # <CJK> +0x8EF1 0x9996 # <CJK> +0x8EF2 0x5112 # <CJK> +0x8EF3 0x53D7 # <CJK> +0x8EF4 0x546A # <CJK> +0x8EF5 0x5BFF # <CJK> +0x8EF6 0x6388 # <CJK> +0x8EF7 0x6A39 # <CJK> +0x8EF8 0x7DAC # <CJK> +0x8EF9 0x9700 # <CJK> +0x8EFA 0x56DA # <CJK> +0x8EFB 0x53CE # <CJK> +0x8EFC 0x5468 # <CJK> +0x8F40 0x5B97 # <CJK> +0x8F41 0x5C31 # <CJK> +0x8F42 0x5DDE # <CJK> +0x8F43 0x4FEE # <CJK> +0x8F44 0x6101 # <CJK> +0x8F45 0x62FE # <CJK> +0x8F46 0x6D32 # <CJK> +0x8F47 0x79C0 # <CJK> +0x8F48 0x79CB # <CJK> +0x8F49 0x7D42 # <CJK> +0x8F4A 0x7E4D # <CJK> +0x8F4B 0x7FD2 # <CJK> +0x8F4C 0x81ED # <CJK> +0x8F4D 0x821F # <CJK> +0x8F4E 0x8490 # <CJK> +0x8F4F 0x8846 # <CJK> +0x8F50 0x8972 # <CJK> +0x8F51 0x8B90 # <CJK> +0x8F52 0x8E74 # <CJK> +0x8F53 0x8F2F # <CJK> +0x8F54 0x9031 # <CJK> +0x8F55 0x914B # <CJK> +0x8F56 0x916C # <CJK> +0x8F57 0x96C6 # <CJK> +0x8F58 0x919C # <CJK> +0x8F59 0x4EC0 # <CJK> +0x8F5A 0x4F4F # <CJK> +0x8F5B 0x5145 # <CJK> +0x8F5C 0x5341 # <CJK> +0x8F5D 0x5F93 # <CJK> +0x8F5E 0x620E # <CJK> +0x8F5F 0x67D4 # <CJK> +0x8F60 0x6C41 # <CJK> +0x8F61 0x6E0B # <CJK> +0x8F62 0x7363 # <CJK> +0x8F63 0x7E26 # <CJK> +0x8F64 0x91CD # <CJK> +0x8F65 0x9283 # <CJK> +0x8F66 0x53D4 # <CJK> +0x8F67 0x5919 # <CJK> +0x8F68 0x5BBF # <CJK> +0x8F69 0x6DD1 # <CJK> +0x8F6A 0x795D # <CJK> +0x8F6B 0x7E2E # <CJK> +0x8F6C 0x7C9B # <CJK> +0x8F6D 0x587E # <CJK> +0x8F6E 0x719F # <CJK> +0x8F6F 0x51FA # <CJK> +0x8F70 0x8853 # <CJK> +0x8F71 0x8FF0 # <CJK> +0x8F72 0x4FCA # <CJK> +0x8F73 0x5CFB # <CJK> +0x8F74 0x6625 # <CJK> +0x8F75 0x77AC # <CJK> +0x8F76 0x7AE3 # <CJK> +0x8F77 0x821C # <CJK> +0x8F78 0x99FF # <CJK> +0x8F79 0x51C6 # <CJK> +0x8F7A 0x5FAA # <CJK> +0x8F7B 0x65EC # <CJK> +0x8F7C 0x696F # <CJK> +0x8F7D 0x6B89 # <CJK> +0x8F7E 0x6DF3 # <CJK> +0x8F80 0x6E96 # <CJK> +0x8F81 0x6F64 # <CJK> +0x8F82 0x76FE # <CJK> +0x8F83 0x7D14 # <CJK> +0x8F84 0x5DE1 # <CJK> +0x8F85 0x9075 # <CJK> +0x8F86 0x9187 # <CJK> +0x8F87 0x9806 # <CJK> +0x8F88 0x51E6 # <CJK> +0x8F89 0x521D # <CJK> +0x8F8A 0x6240 # <CJK> +0x8F8B 0x6691 # <CJK> +0x8F8C 0x66D9 # <CJK> +0x8F8D 0x6E1A # <CJK> +0x8F8E 0x5EB6 # <CJK> +0x8F8F 0x7DD2 # <CJK> +0x8F90 0x7F72 # <CJK> +0x8F91 0x66F8 # <CJK> +0x8F92 0x85AF # <CJK> +0x8F93 0x85F7 # <CJK> +0x8F94 0x8AF8 # <CJK> +0x8F95 0x52A9 # <CJK> +0x8F96 0x53D9 # <CJK> +0x8F97 0x5973 # <CJK> +0x8F98 0x5E8F # <CJK> +0x8F99 0x5F90 # <CJK> +0x8F9A 0x6055 # <CJK> +0x8F9B 0x92E4 # <CJK> +0x8F9C 0x9664 # <CJK> +0x8F9D 0x50B7 # <CJK> +0x8F9E 0x511F # <CJK> +0x8F9F 0x52DD # <CJK> +0x8FA0 0x5320 # <CJK> +0x8FA1 0x5347 # <CJK> +0x8FA2 0x53EC # <CJK> +0x8FA3 0x54E8 # <CJK> +0x8FA4 0x5546 # <CJK> +0x8FA5 0x5531 # <CJK> +0x8FA6 0x5617 # <CJK> +0x8FA7 0x5968 # <CJK> +0x8FA8 0x59BE # <CJK> +0x8FA9 0x5A3C # <CJK> +0x8FAA 0x5BB5 # <CJK> +0x8FAB 0x5C06 # <CJK> +0x8FAC 0x5C0F # <CJK> +0x8FAD 0x5C11 # <CJK> +0x8FAE 0x5C1A # <CJK> +0x8FAF 0x5E84 # <CJK> +0x8FB0 0x5E8A # <CJK> +0x8FB1 0x5EE0 # <CJK> +0x8FB2 0x5F70 # <CJK> +0x8FB3 0x627F # <CJK> +0x8FB4 0x6284 # <CJK> +0x8FB5 0x62DB # <CJK> +0x8FB6 0x638C # <CJK> +0x8FB7 0x6377 # <CJK> +0x8FB8 0x6607 # <CJK> +0x8FB9 0x660C # <CJK> +0x8FBA 0x662D # <CJK> +0x8FBB 0x6676 # <CJK> +0x8FBC 0x677E # <CJK> +0x8FBD 0x68A2 # <CJK> +0x8FBE 0x6A1F # <CJK> +0x8FBF 0x6A35 # <CJK> +0x8FC0 0x6CBC # <CJK> +0x8FC1 0x6D88 # <CJK> +0x8FC2 0x6E09 # <CJK> +0x8FC3 0x6E58 # <CJK> +0x8FC4 0x713C # <CJK> +0x8FC5 0x7126 # <CJK> +0x8FC6 0x7167 # <CJK> +0x8FC7 0x75C7 # <CJK> +0x8FC8 0x7701 # <CJK> +0x8FC9 0x785D # <CJK> +0x8FCA 0x7901 # <CJK> +0x8FCB 0x7965 # <CJK> +0x8FCC 0x79F0 # <CJK> +0x8FCD 0x7AE0 # <CJK> +0x8FCE 0x7B11 # <CJK> +0x8FCF 0x7CA7 # <CJK> +0x8FD0 0x7D39 # <CJK> +0x8FD1 0x8096 # <CJK> +0x8FD2 0x83D6 # <CJK> +0x8FD3 0x848B # <CJK> +0x8FD4 0x8549 # <CJK> +0x8FD5 0x885D # <CJK> +0x8FD6 0x88F3 # <CJK> +0x8FD7 0x8A1F # <CJK> +0x8FD8 0x8A3C # <CJK> +0x8FD9 0x8A54 # <CJK> +0x8FDA 0x8A73 # <CJK> +0x8FDB 0x8C61 # <CJK> +0x8FDC 0x8CDE # <CJK> +0x8FDD 0x91A4 # <CJK> +0x8FDE 0x9266 # <CJK> +0x8FDF 0x937E # <CJK> +0x8FE0 0x9418 # <CJK> +0x8FE1 0x969C # <CJK> +0x8FE2 0x9798 # <CJK> +0x8FE3 0x4E0A # <CJK> +0x8FE4 0x4E08 # <CJK> +0x8FE5 0x4E1E # <CJK> +0x8FE6 0x4E57 # <CJK> +0x8FE7 0x5197 # <CJK> +0x8FE8 0x5270 # <CJK> +0x8FE9 0x57CE # <CJK> +0x8FEA 0x5834 # <CJK> +0x8FEB 0x58CC # <CJK> +0x8FEC 0x5B22 # <CJK> +0x8FED 0x5E38 # <CJK> +0x8FEE 0x60C5 # <CJK> +0x8FEF 0x64FE # <CJK> +0x8FF0 0x6761 # <CJK> +0x8FF1 0x6756 # <CJK> +0x8FF2 0x6D44 # <CJK> +0x8FF3 0x72B6 # <CJK> +0x8FF4 0x7573 # <CJK> +0x8FF5 0x7A63 # <CJK> +0x8FF6 0x84B8 # <CJK> +0x8FF7 0x8B72 # <CJK> +0x8FF8 0x91B8 # <CJK> +0x8FF9 0x9320 # <CJK> +0x8FFA 0x5631 # <CJK> +0x8FFB 0x57F4 # <CJK> +0x8FFC 0x98FE # <CJK> +0x9040 0x62ED # <CJK> +0x9041 0x690D # <CJK> +0x9042 0x6B96 # <CJK> +0x9043 0x71ED # <CJK> +0x9044 0x7E54 # <CJK> +0x9045 0x8077 # <CJK> +0x9046 0x8272 # <CJK> +0x9047 0x89E6 # <CJK> +0x9048 0x98DF # <CJK> +0x9049 0x8755 # <CJK> +0x904A 0x8FB1 # <CJK> +0x904B 0x5C3B # <CJK> +0x904C 0x4F38 # <CJK> +0x904D 0x4FE1 # <CJK> +0x904E 0x4FB5 # <CJK> +0x904F 0x5507 # <CJK> +0x9050 0x5A20 # <CJK> +0x9051 0x5BDD # <CJK> +0x9052 0x5BE9 # <CJK> +0x9053 0x5FC3 # <CJK> +0x9054 0x614E # <CJK> +0x9055 0x632F # <CJK> +0x9056 0x65B0 # <CJK> +0x9057 0x664B # <CJK> +0x9058 0x68EE # <CJK> +0x9059 0x699B # <CJK> +0x905A 0x6D78 # <CJK> +0x905B 0x6DF1 # <CJK> +0x905C 0x7533 # <CJK> +0x905D 0x75B9 # <CJK> +0x905E 0x771F # <CJK> +0x905F 0x795E # <CJK> +0x9060 0x79E6 # <CJK> +0x9061 0x7D33 # <CJK> +0x9062 0x81E3 # <CJK> +0x9063 0x82AF # <CJK> +0x9064 0x85AA # <CJK> +0x9065 0x89AA # <CJK> +0x9066 0x8A3A # <CJK> +0x9067 0x8EAB # <CJK> +0x9068 0x8F9B # <CJK> +0x9069 0x9032 # <CJK> +0x906A 0x91DD # <CJK> +0x906B 0x9707 # <CJK> +0x906C 0x4EBA # <CJK> +0x906D 0x4EC1 # <CJK> +0x906E 0x5203 # <CJK> +0x906F 0x5875 # <CJK> +0x9070 0x58EC # <CJK> +0x9071 0x5C0B # <CJK> +0x9072 0x751A # <CJK> +0x9073 0x5C3D # <CJK> +0x9074 0x814E # <CJK> +0x9075 0x8A0A # <CJK> +0x9076 0x8FC5 # <CJK> +0x9077 0x9663 # <CJK> +0x9078 0x976D # <CJK> +0x9079 0x7B25 # <CJK> +0x907A 0x8ACF # <CJK> +0x907B 0x9808 # <CJK> +0x907C 0x9162 # <CJK> +0x907D 0x56F3 # <CJK> +0x907E 0x53A8 # <CJK> +0x9080 0x9017 # <CJK> +0x9081 0x5439 # <CJK> +0x9082 0x5782 # <CJK> +0x9083 0x5E25 # <CJK> +0x9084 0x63A8 # <CJK> +0x9085 0x6C34 # <CJK> +0x9086 0x708A # <CJK> +0x9087 0x7761 # <CJK> +0x9088 0x7C8B # <CJK> +0x9089 0x7FE0 # <CJK> +0x908A 0x8870 # <CJK> +0x908B 0x9042 # <CJK> +0x908C 0x9154 # <CJK> +0x908D 0x9310 # <CJK> +0x908E 0x9318 # <CJK> +0x908F 0x968F # <CJK> +0x9090 0x745E # <CJK> +0x9091 0x9AC4 # <CJK> +0x9092 0x5D07 # <CJK> +0x9093 0x5D69 # <CJK> +0x9094 0x6570 # <CJK> +0x9095 0x67A2 # <CJK> +0x9096 0x8DA8 # <CJK> +0x9097 0x96DB # <CJK> +0x9098 0x636E # <CJK> +0x9099 0x6749 # <CJK> +0x909A 0x6919 # <CJK> +0x909B 0x83C5 # <CJK> +0x909C 0x9817 # <CJK> +0x909D 0x96C0 # <CJK> +0x909E 0x88FE # <CJK> +0x909F 0x6F84 # <CJK> +0x90A0 0x647A # <CJK> +0x90A1 0x5BF8 # <CJK> +0x90A2 0x4E16 # <CJK> +0x90A3 0x702C # <CJK> +0x90A4 0x755D # <CJK> +0x90A5 0x662F # <CJK> +0x90A6 0x51C4 # <CJK> +0x90A7 0x5236 # <CJK> +0x90A8 0x52E2 # <CJK> +0x90A9 0x59D3 # <CJK> +0x90AA 0x5F81 # <CJK> +0x90AB 0x6027 # <CJK> +0x90AC 0x6210 # <CJK> +0x90AD 0x653F # <CJK> +0x90AE 0x6574 # <CJK> +0x90AF 0x661F # <CJK> +0x90B0 0x6674 # <CJK> +0x90B1 0x68F2 # <CJK> +0x90B2 0x6816 # <CJK> +0x90B3 0x6B63 # <CJK> +0x90B4 0x6E05 # <CJK> +0x90B5 0x7272 # <CJK> +0x90B6 0x751F # <CJK> +0x90B7 0x76DB # <CJK> +0x90B8 0x7CBE # <CJK> +0x90B9 0x8056 # <CJK> +0x90BA 0x58F0 # <CJK> +0x90BB 0x88FD # <CJK> +0x90BC 0x897F # <CJK> +0x90BD 0x8AA0 # <CJK> +0x90BE 0x8A93 # <CJK> +0x90BF 0x8ACB # <CJK> +0x90C0 0x901D # <CJK> +0x90C1 0x9192 # <CJK> +0x90C2 0x9752 # <CJK> +0x90C3 0x9759 # <CJK> +0x90C4 0x6589 # <CJK> +0x90C5 0x7A0E # <CJK> +0x90C6 0x8106 # <CJK> +0x90C7 0x96BB # <CJK> +0x90C8 0x5E2D # <CJK> +0x90C9 0x60DC # <CJK> +0x90CA 0x621A # <CJK> +0x90CB 0x65A5 # <CJK> +0x90CC 0x6614 # <CJK> +0x90CD 0x6790 # <CJK> +0x90CE 0x77F3 # <CJK> +0x90CF 0x7A4D # <CJK> +0x90D0 0x7C4D # <CJK> +0x90D1 0x7E3E # <CJK> +0x90D2 0x810A # <CJK> +0x90D3 0x8CAC # <CJK> +0x90D4 0x8D64 # <CJK> +0x90D5 0x8DE1 # <CJK> +0x90D6 0x8E5F # <CJK> +0x90D7 0x78A9 # <CJK> +0x90D8 0x5207 # <CJK> +0x90D9 0x62D9 # <CJK> +0x90DA 0x63A5 # <CJK> +0x90DB 0x6442 # <CJK> +0x90DC 0x6298 # <CJK> +0x90DD 0x8A2D # <CJK> +0x90DE 0x7A83 # <CJK> +0x90DF 0x7BC0 # <CJK> +0x90E0 0x8AAC # <CJK> +0x90E1 0x96EA # <CJK> +0x90E2 0x7D76 # <CJK> +0x90E3 0x820C # <CJK> +0x90E4 0x8749 # <CJK> +0x90E5 0x4ED9 # <CJK> +0x90E6 0x5148 # <CJK> +0x90E7 0x5343 # <CJK> +0x90E8 0x5360 # <CJK> +0x90E9 0x5BA3 # <CJK> +0x90EA 0x5C02 # <CJK> +0x90EB 0x5C16 # <CJK> +0x90EC 0x5DDD # <CJK> +0x90ED 0x6226 # <CJK> +0x90EE 0x6247 # <CJK> +0x90EF 0x64B0 # <CJK> +0x90F0 0x6813 # <CJK> +0x90F1 0x6834 # <CJK> +0x90F2 0x6CC9 # <CJK> +0x90F3 0x6D45 # <CJK> +0x90F4 0x6D17 # <CJK> +0x90F5 0x67D3 # <CJK> +0x90F6 0x6F5C # <CJK> +0x90F7 0x714E # <CJK> +0x90F8 0x717D # <CJK> +0x90F9 0x65CB # <CJK> +0x90FA 0x7A7F # <CJK> +0x90FB 0x7BAD # <CJK> +0x90FC 0x7DDA # <CJK> +0x9140 0x7E4A # <CJK> +0x9141 0x7FA8 # <CJK> +0x9142 0x817A # <CJK> +0x9143 0x821B # <CJK> +0x9144 0x8239 # <CJK> +0x9145 0x85A6 # <CJK> +0x9146 0x8A6E # <CJK> +0x9147 0x8CCE # <CJK> +0x9148 0x8DF5 # <CJK> +0x9149 0x9078 # <CJK> +0x914A 0x9077 # <CJK> +0x914B 0x92AD # <CJK> +0x914C 0x9291 # <CJK> +0x914D 0x9583 # <CJK> +0x914E 0x9BAE # <CJK> +0x914F 0x524D # <CJK> +0x9150 0x5584 # <CJK> +0x9151 0x6F38 # <CJK> +0x9152 0x7136 # <CJK> +0x9153 0x5168 # <CJK> +0x9154 0x7985 # <CJK> +0x9155 0x7E55 # <CJK> +0x9156 0x81B3 # <CJK> +0x9157 0x7CCE # <CJK> +0x9158 0x564C # <CJK> +0x9159 0x5851 # <CJK> +0x915A 0x5CA8 # <CJK> +0x915B 0x63AA # <CJK> +0x915C 0x66FE # <CJK> +0x915D 0x66FD # <CJK> +0x915E 0x695A # <CJK> +0x915F 0x72D9 # <CJK> +0x9160 0x758F # <CJK> +0x9161 0x758E # <CJK> +0x9162 0x790E # <CJK> +0x9163 0x7956 # <CJK> +0x9164 0x79DF # <CJK> +0x9165 0x7C97 # <CJK> +0x9166 0x7D20 # <CJK> +0x9167 0x7D44 # <CJK> +0x9168 0x8607 # <CJK> +0x9169 0x8A34 # <CJK> +0x916A 0x963B # <CJK> +0x916B 0x9061 # <CJK> +0x916C 0x9F20 # <CJK> +0x916D 0x50E7 # <CJK> +0x916E 0x5275 # <CJK> +0x916F 0x53CC # <CJK> +0x9170 0x53E2 # <CJK> +0x9171 0x5009 # <CJK> +0x9172 0x55AA # <CJK> +0x9173 0x58EE # <CJK> +0x9174 0x594F # <CJK> +0x9175 0x723D # <CJK> +0x9176 0x5B8B # <CJK> +0x9177 0x5C64 # <CJK> +0x9178 0x531D # <CJK> +0x9179 0x60E3 # <CJK> +0x917A 0x60F3 # <CJK> +0x917B 0x635C # <CJK> +0x917C 0x6383 # <CJK> +0x917D 0x633F # <CJK> +0x917E 0x63BB # <CJK> +0x9180 0x64CD # <CJK> +0x9181 0x65E9 # <CJK> +0x9182 0x66F9 # <CJK> +0x9183 0x5DE3 # <CJK> +0x9184 0x69CD # <CJK> +0x9185 0x69FD # <CJK> +0x9186 0x6F15 # <CJK> +0x9187 0x71E5 # <CJK> +0x9188 0x4E89 # <CJK> +0x9189 0x75E9 # <CJK> +0x918A 0x76F8 # <CJK> +0x918B 0x7A93 # <CJK> +0x918C 0x7CDF # <CJK> +0x918D 0x7DCF # <CJK> +0x918E 0x7D9C # <CJK> +0x918F 0x8061 # <CJK> +0x9190 0x8349 # <CJK> +0x9191 0x8358 # <CJK> +0x9192 0x846C # <CJK> +0x9193 0x84BC # <CJK> +0x9194 0x85FB # <CJK> +0x9195 0x88C5 # <CJK> +0x9196 0x8D70 # <CJK> +0x9197 0x9001 # <CJK> +0x9198 0x906D # <CJK> +0x9199 0x9397 # <CJK> +0x919A 0x971C # <CJK> +0x919B 0x9A12 # <CJK> +0x919C 0x50CF # <CJK> +0x919D 0x5897 # <CJK> +0x919E 0x618E # <CJK> +0x919F 0x81D3 # <CJK> +0x91A0 0x8535 # <CJK> +0x91A1 0x8D08 # <CJK> +0x91A2 0x9020 # <CJK> +0x91A3 0x4FC3 # <CJK> +0x91A4 0x5074 # <CJK> +0x91A5 0x5247 # <CJK> +0x91A6 0x5373 # <CJK> +0x91A7 0x606F # <CJK> +0x91A8 0x6349 # <CJK> +0x91A9 0x675F # <CJK> +0x91AA 0x6E2C # <CJK> +0x91AB 0x8DB3 # <CJK> +0x91AC 0x901F # <CJK> +0x91AD 0x4FD7 # <CJK> +0x91AE 0x5C5E # <CJK> +0x91AF 0x8CCA # <CJK> +0x91B0 0x65CF # <CJK> +0x91B1 0x7D9A # <CJK> +0x91B2 0x5352 # <CJK> +0x91B3 0x8896 # <CJK> +0x91B4 0x5176 # <CJK> +0x91B5 0x63C3 # <CJK> +0x91B6 0x5B58 # <CJK> +0x91B7 0x5B6B # <CJK> +0x91B8 0x5C0A # <CJK> +0x91B9 0x640D # <CJK> +0x91BA 0x6751 # <CJK> +0x91BB 0x905C # <CJK> +0x91BC 0x4ED6 # <CJK> +0x91BD 0x591A # <CJK> +0x91BE 0x592A # <CJK> +0x91BF 0x6C70 # <CJK> +0x91C0 0x8A51 # <CJK> +0x91C1 0x553E # <CJK> +0x91C2 0x5815 # <CJK> +0x91C3 0x59A5 # <CJK> +0x91C4 0x60F0 # <CJK> +0x91C5 0x6253 # <CJK> +0x91C6 0x67C1 # <CJK> +0x91C7 0x8235 # <CJK> +0x91C8 0x6955 # <CJK> +0x91C9 0x9640 # <CJK> +0x91CA 0x99C4 # <CJK> +0x91CB 0x9A28 # <CJK> +0x91CC 0x4F53 # <CJK> +0x91CD 0x5806 # <CJK> +0x91CE 0x5BFE # <CJK> +0x91CF 0x8010 # <CJK> +0x91D0 0x5CB1 # <CJK> +0x91D1 0x5E2F # <CJK> +0x91D2 0x5F85 # <CJK> +0x91D3 0x6020 # <CJK> +0x91D4 0x614B # <CJK> +0x91D5 0x6234 # <CJK> +0x91D6 0x66FF # <CJK> +0x91D7 0x6CF0 # <CJK> +0x91D8 0x6EDE # <CJK> +0x91D9 0x80CE # <CJK> +0x91DA 0x817F # <CJK> +0x91DB 0x82D4 # <CJK> +0x91DC 0x888B # <CJK> +0x91DD 0x8CB8 # <CJK> +0x91DE 0x9000 # <CJK> +0x91DF 0x902E # <CJK> +0x91E0 0x968A # <CJK> +0x91E1 0x9EDB # <CJK> +0x91E2 0x9BDB # <CJK> +0x91E3 0x4EE3 # <CJK> +0x91E4 0x53F0 # <CJK> +0x91E5 0x5927 # <CJK> +0x91E6 0x7B2C # <CJK> +0x91E7 0x918D # <CJK> +0x91E8 0x984C # <CJK> +0x91E9 0x9DF9 # <CJK> +0x91EA 0x6EDD # <CJK> +0x91EB 0x7027 # <CJK> +0x91EC 0x5353 # <CJK> +0x91ED 0x5544 # <CJK> +0x91EE 0x5B85 # <CJK> +0x91EF 0x6258 # <CJK> +0x91F0 0x629E # <CJK> +0x91F1 0x62D3 # <CJK> +0x91F2 0x6CA2 # <CJK> +0x91F3 0x6FEF # <CJK> +0x91F4 0x7422 # <CJK> +0x91F5 0x8A17 # <CJK> +0x91F6 0x9438 # <CJK> +0x91F7 0x6FC1 # <CJK> +0x91F8 0x8AFE # <CJK> +0x91F9 0x8338 # <CJK> +0x91FA 0x51E7 # <CJK> +0x91FB 0x86F8 # <CJK> +0x91FC 0x53EA # <CJK> +0x9240 0x53E9 # <CJK> +0x9241 0x4F46 # <CJK> +0x9242 0x9054 # <CJK> +0x9243 0x8FB0 # <CJK> +0x9244 0x596A # <CJK> +0x9245 0x8131 # <CJK> +0x9246 0x5DFD # <CJK> +0x9247 0x7AEA # <CJK> +0x9248 0x8FBF # <CJK> +0x9249 0x68DA # <CJK> +0x924A 0x8C37 # <CJK> +0x924B 0x72F8 # <CJK> +0x924C 0x9C48 # <CJK> +0x924D 0x6A3D # <CJK> +0x924E 0x8AB0 # <CJK> +0x924F 0x4E39 # <CJK> +0x9250 0x5358 # <CJK> +0x9251 0x5606 # <CJK> +0x9252 0x5766 # <CJK> +0x9253 0x62C5 # <CJK> +0x9254 0x63A2 # <CJK> +0x9255 0x65E6 # <CJK> +0x9256 0x6B4E # <CJK> +0x9257 0x6DE1 # <CJK> +0x9258 0x6E5B # <CJK> +0x9259 0x70AD # <CJK> +0x925A 0x77ED # <CJK> +0x925B 0x7AEF # <CJK> +0x925C 0x7BAA # <CJK> +0x925D 0x7DBB # <CJK> +0x925E 0x803D # <CJK> +0x925F 0x80C6 # <CJK> +0x9260 0x86CB # <CJK> +0x9261 0x8A95 # <CJK> +0x9262 0x935B # <CJK> +0x9263 0x56E3 # <CJK> +0x9264 0x58C7 # <CJK> +0x9265 0x5F3E # <CJK> +0x9266 0x65AD # <CJK> +0x9267 0x6696 # <CJK> +0x9268 0x6A80 # <CJK> +0x9269 0x6BB5 # <CJK> +0x926A 0x7537 # <CJK> +0x926B 0x8AC7 # <CJK> +0x926C 0x5024 # <CJK> +0x926D 0x77E5 # <CJK> +0x926E 0x5730 # <CJK> +0x926F 0x5F1B # <CJK> +0x9270 0x6065 # <CJK> +0x9271 0x667A # <CJK> +0x9272 0x6C60 # <CJK> +0x9273 0x75F4 # <CJK> +0x9274 0x7A1A # <CJK> +0x9275 0x7F6E # <CJK> +0x9276 0x81F4 # <CJK> +0x9277 0x8718 # <CJK> +0x9278 0x9045 # <CJK> +0x9279 0x99B3 # <CJK> +0x927A 0x7BC9 # <CJK> +0x927B 0x755C # <CJK> +0x927C 0x7AF9 # <CJK> +0x927D 0x7B51 # <CJK> +0x927E 0x84C4 # <CJK> +0x9280 0x9010 # <CJK> +0x9281 0x79E9 # <CJK> +0x9282 0x7A92 # <CJK> +0x9283 0x8336 # <CJK> +0x9284 0x5AE1 # <CJK> +0x9285 0x7740 # <CJK> +0x9286 0x4E2D # <CJK> +0x9287 0x4EF2 # <CJK> +0x9288 0x5B99 # <CJK> +0x9289 0x5FE0 # <CJK> +0x928A 0x62BD # <CJK> +0x928B 0x663C # <CJK> +0x928C 0x67F1 # <CJK> +0x928D 0x6CE8 # <CJK> +0x928E 0x866B # <CJK> +0x928F 0x8877 # <CJK> +0x9290 0x8A3B # <CJK> +0x9291 0x914E # <CJK> +0x9292 0x92F3 # <CJK> +0x9293 0x99D0 # <CJK> +0x9294 0x6A17 # <CJK> +0x9295 0x7026 # <CJK> +0x9296 0x732A # <CJK> +0x9297 0x82E7 # <CJK> +0x9298 0x8457 # <CJK> +0x9299 0x8CAF # <CJK> +0x929A 0x4E01 # <CJK> +0x929B 0x5146 # <CJK> +0x929C 0x51CB # <CJK> +0x929D 0x558B # <CJK> +0x929E 0x5BF5 # <CJK> +0x929F 0x5E16 # <CJK> +0x92A0 0x5E33 # <CJK> +0x92A1 0x5E81 # <CJK> +0x92A2 0x5F14 # <CJK> +0x92A3 0x5F35 # <CJK> +0x92A4 0x5F6B # <CJK> +0x92A5 0x5FB4 # <CJK> +0x92A6 0x61F2 # <CJK> +0x92A7 0x6311 # <CJK> +0x92A8 0x66A2 # <CJK> +0x92A9 0x671D # <CJK> +0x92AA 0x6F6E # <CJK> +0x92AB 0x7252 # <CJK> +0x92AC 0x753A # <CJK> +0x92AD 0x773A # <CJK> +0x92AE 0x8074 # <CJK> +0x92AF 0x8139 # <CJK> +0x92B0 0x8178 # <CJK> +0x92B1 0x8776 # <CJK> +0x92B2 0x8ABF # <CJK> +0x92B3 0x8ADC # <CJK> +0x92B4 0x8D85 # <CJK> +0x92B5 0x8DF3 # <CJK> +0x92B6 0x929A # <CJK> +0x92B7 0x9577 # <CJK> +0x92B8 0x9802 # <CJK> +0x92B9 0x9CE5 # <CJK> +0x92BA 0x52C5 # <CJK> +0x92BB 0x6357 # <CJK> +0x92BC 0x76F4 # <CJK> +0x92BD 0x6715 # <CJK> +0x92BE 0x6C88 # <CJK> +0x92BF 0x73CD # <CJK> +0x92C0 0x8CC3 # <CJK> +0x92C1 0x93AE # <CJK> +0x92C2 0x9673 # <CJK> +0x92C3 0x6D25 # <CJK> +0x92C4 0x589C # <CJK> +0x92C5 0x690E # <CJK> +0x92C6 0x69CC # <CJK> +0x92C7 0x8FFD # <CJK> +0x92C8 0x939A # <CJK> +0x92C9 0x75DB # <CJK> +0x92CA 0x901A # <CJK> +0x92CB 0x585A # <CJK> +0x92CC 0x6802 # <CJK> +0x92CD 0x63B4 # <CJK> +0x92CE 0x69FB # <CJK> +0x92CF 0x4F43 # <CJK> +0x92D0 0x6F2C # <CJK> +0x92D1 0x67D8 # <CJK> +0x92D2 0x8FBB # <CJK> +0x92D3 0x8526 # <CJK> +0x92D4 0x7DB4 # <CJK> +0x92D5 0x9354 # <CJK> +0x92D6 0x693F # <CJK> +0x92D7 0x6F70 # <CJK> +0x92D8 0x576A # <CJK> +0x92D9 0x58F7 # <CJK> +0x92DA 0x5B2C # <CJK> +0x92DB 0x7D2C # <CJK> +0x92DC 0x722A # <CJK> +0x92DD 0x540A # <CJK> +0x92DE 0x91E3 # <CJK> +0x92DF 0x9DB4 # <CJK> +0x92E0 0x4EAD # <CJK> +0x92E1 0x4F4E # <CJK> +0x92E2 0x505C # <CJK> +0x92E3 0x5075 # <CJK> +0x92E4 0x5243 # <CJK> +0x92E5 0x8C9E # <CJK> +0x92E6 0x5448 # <CJK> +0x92E7 0x5824 # <CJK> +0x92E8 0x5B9A # <CJK> +0x92E9 0x5E1D # <CJK> +0x92EA 0x5E95 # <CJK> +0x92EB 0x5EAD # <CJK> +0x92EC 0x5EF7 # <CJK> +0x92ED 0x5F1F # <CJK> +0x92EE 0x608C # <CJK> +0x92EF 0x62B5 # <CJK> +0x92F0 0x633A # <CJK> +0x92F1 0x63D0 # <CJK> +0x92F2 0x68AF # <CJK> +0x92F3 0x6C40 # <CJK> +0x92F4 0x7887 # <CJK> +0x92F5 0x798E # <CJK> +0x92F6 0x7A0B # <CJK> +0x92F7 0x7DE0 # <CJK> +0x92F8 0x8247 # <CJK> +0x92F9 0x8A02 # <CJK> +0x92FA 0x8AE6 # <CJK> +0x92FB 0x8E44 # <CJK> +0x92FC 0x9013 # <CJK> +0x9340 0x90B8 # <CJK> +0x9341 0x912D # <CJK> +0x9342 0x91D8 # <CJK> +0x9343 0x9F0E # <CJK> +0x9344 0x6CE5 # <CJK> +0x9345 0x6458 # <CJK> +0x9346 0x64E2 # <CJK> +0x9347 0x6575 # <CJK> +0x9348 0x6EF4 # <CJK> +0x9349 0x7684 # <CJK> +0x934A 0x7B1B # <CJK> +0x934B 0x9069 # <CJK> +0x934C 0x93D1 # <CJK> +0x934D 0x6EBA # <CJK> +0x934E 0x54F2 # <CJK> +0x934F 0x5FB9 # <CJK> +0x9350 0x64A4 # <CJK> +0x9351 0x8F4D # <CJK> +0x9352 0x8FED # <CJK> +0x9353 0x9244 # <CJK> +0x9354 0x5178 # <CJK> +0x9355 0x586B # <CJK> +0x9356 0x5929 # <CJK> +0x9357 0x5C55 # <CJK> +0x9358 0x5E97 # <CJK> +0x9359 0x6DFB # <CJK> +0x935A 0x7E8F # <CJK> +0x935B 0x751C # <CJK> +0x935C 0x8CBC # <CJK> +0x935D 0x8EE2 # <CJK> +0x935E 0x985B # <CJK> +0x935F 0x70B9 # <CJK> +0x9360 0x4F1D # <CJK> +0x9361 0x6BBF # <CJK> +0x9362 0x6FB1 # <CJK> +0x9363 0x7530 # <CJK> +0x9364 0x96FB # <CJK> +0x9365 0x514E # <CJK> +0x9366 0x5410 # <CJK> +0x9367 0x5835 # <CJK> +0x9368 0x5857 # <CJK> +0x9369 0x59AC # <CJK> +0x936A 0x5C60 # <CJK> +0x936B 0x5F92 # <CJK> +0x936C 0x6597 # <CJK> +0x936D 0x675C # <CJK> +0x936E 0x6E21 # <CJK> +0x936F 0x767B # <CJK> +0x9370 0x83DF # <CJK> +0x9371 0x8CED # <CJK> +0x9372 0x9014 # <CJK> +0x9373 0x90FD # <CJK> +0x9374 0x934D # <CJK> +0x9375 0x7825 # <CJK> +0x9376 0x783A # <CJK> +0x9377 0x52AA # <CJK> +0x9378 0x5EA6 # <CJK> +0x9379 0x571F # <CJK> +0x937A 0x5974 # <CJK> +0x937B 0x6012 # <CJK> +0x937C 0x5012 # <CJK> +0x937D 0x515A # <CJK> +0x937E 0x51AC # <CJK> +0x9380 0x51CD # <CJK> +0x9381 0x5200 # <CJK> +0x9382 0x5510 # <CJK> +0x9383 0x5854 # <CJK> +0x9384 0x5858 # <CJK> +0x9385 0x5957 # <CJK> +0x9386 0x5B95 # <CJK> +0x9387 0x5CF6 # <CJK> +0x9388 0x5D8B # <CJK> +0x9389 0x60BC # <CJK> +0x938A 0x6295 # <CJK> +0x938B 0x642D # <CJK> +0x938C 0x6771 # <CJK> +0x938D 0x6843 # <CJK> +0x938E 0x68BC # <CJK> +0x938F 0x68DF # <CJK> +0x9390 0x76D7 # <CJK> +0x9391 0x6DD8 # <CJK> +0x9392 0x6E6F # <CJK> +0x9393 0x6D9B # <CJK> +0x9394 0x706F # <CJK> +0x9395 0x71C8 # <CJK> +0x9396 0x5F53 # <CJK> +0x9397 0x75D8 # <CJK> +0x9398 0x7977 # <CJK> +0x9399 0x7B49 # <CJK> +0x939A 0x7B54 # <CJK> +0x939B 0x7B52 # <CJK> +0x939C 0x7CD6 # <CJK> +0x939D 0x7D71 # <CJK> +0x939E 0x5230 # <CJK> +0x939F 0x8463 # <CJK> +0x93A0 0x8569 # <CJK> +0x93A1 0x85E4 # <CJK> +0x93A2 0x8A0E # <CJK> +0x93A3 0x8B04 # <CJK> +0x93A4 0x8C46 # <CJK> +0x93A5 0x8E0F # <CJK> +0x93A6 0x9003 # <CJK> +0x93A7 0x900F # <CJK> +0x93A8 0x9419 # <CJK> +0x93A9 0x9676 # <CJK> +0x93AA 0x982D # <CJK> +0x93AB 0x9A30 # <CJK> +0x93AC 0x95D8 # <CJK> +0x93AD 0x50CD # <CJK> +0x93AE 0x52D5 # <CJK> +0x93AF 0x540C # <CJK> +0x93B0 0x5802 # <CJK> +0x93B1 0x5C0E # <CJK> +0x93B2 0x61A7 # <CJK> +0x93B3 0x649E # <CJK> +0x93B4 0x6D1E # <CJK> +0x93B5 0x77B3 # <CJK> +0x93B6 0x7AE5 # <CJK> +0x93B7 0x80F4 # <CJK> +0x93B8 0x8404 # <CJK> +0x93B9 0x9053 # <CJK> +0x93BA 0x9285 # <CJK> +0x93BB 0x5CE0 # <CJK> +0x93BC 0x9D07 # <CJK> +0x93BD 0x533F # <CJK> +0x93BE 0x5F97 # <CJK> +0x93BF 0x5FB3 # <CJK> +0x93C0 0x6D9C # <CJK> +0x93C1 0x7279 # <CJK> +0x93C2 0x7763 # <CJK> +0x93C3 0x79BF # <CJK> +0x93C4 0x7BE4 # <CJK> +0x93C5 0x6BD2 # <CJK> +0x93C6 0x72EC # <CJK> +0x93C7 0x8AAD # <CJK> +0x93C8 0x6803 # <CJK> +0x93C9 0x6A61 # <CJK> +0x93CA 0x51F8 # <CJK> +0x93CB 0x7A81 # <CJK> +0x93CC 0x6934 # <CJK> +0x93CD 0x5C4A # <CJK> +0x93CE 0x9CF6 # <CJK> +0x93CF 0x82EB # <CJK> +0x93D0 0x5BC5 # <CJK> +0x93D1 0x9149 # <CJK> +0x93D2 0x701E # <CJK> +0x93D3 0x5678 # <CJK> +0x93D4 0x5C6F # <CJK> +0x93D5 0x60C7 # <CJK> +0x93D6 0x6566 # <CJK> +0x93D7 0x6C8C # <CJK> +0x93D8 0x8C5A # <CJK> +0x93D9 0x9041 # <CJK> +0x93DA 0x9813 # <CJK> +0x93DB 0x5451 # <CJK> +0x93DC 0x66C7 # <CJK> +0x93DD 0x920D # <CJK> +0x93DE 0x5948 # <CJK> +0x93DF 0x90A3 # <CJK> +0x93E0 0x5185 # <CJK> +0x93E1 0x4E4D # <CJK> +0x93E2 0x51EA # <CJK> +0x93E3 0x8599 # <CJK> +0x93E4 0x8B0E # <CJK> +0x93E5 0x7058 # <CJK> +0x93E6 0x637A # <CJK> +0x93E7 0x934B # <CJK> +0x93E8 0x6962 # <CJK> +0x93E9 0x99B4 # <CJK> +0x93EA 0x7E04 # <CJK> +0x93EB 0x7577 # <CJK> +0x93EC 0x5357 # <CJK> +0x93ED 0x6960 # <CJK> +0x93EE 0x8EDF # <CJK> +0x93EF 0x96E3 # <CJK> +0x93F0 0x6C5D # <CJK> +0x93F1 0x4E8C # <CJK> +0x93F2 0x5C3C # <CJK> +0x93F3 0x5F10 # <CJK> +0x93F4 0x8FE9 # <CJK> +0x93F5 0x5302 # <CJK> +0x93F6 0x8CD1 # <CJK> +0x93F7 0x8089 # <CJK> +0x93F8 0x8679 # <CJK> +0x93F9 0x5EFF # <CJK> +0x93FA 0x65E5 # <CJK> +0x93FB 0x4E73 # <CJK> +0x93FC 0x5165 # <CJK> +0x9440 0x5982 # <CJK> +0x9441 0x5C3F # <CJK> +0x9442 0x97EE # <CJK> +0x9443 0x4EFB # <CJK> +0x9444 0x598A # <CJK> +0x9445 0x5FCD # <CJK> +0x9446 0x8A8D # <CJK> +0x9447 0x6FE1 # <CJK> +0x9448 0x79B0 # <CJK> +0x9449 0x7962 # <CJK> +0x944A 0x5BE7 # <CJK> +0x944B 0x8471 # <CJK> +0x944C 0x732B # <CJK> +0x944D 0x71B1 # <CJK> +0x944E 0x5E74 # <CJK> +0x944F 0x5FF5 # <CJK> +0x9450 0x637B # <CJK> +0x9451 0x649A # <CJK> +0x9452 0x71C3 # <CJK> +0x9453 0x7C98 # <CJK> +0x9454 0x4E43 # <CJK> +0x9455 0x5EFC # <CJK> +0x9456 0x4E4B # <CJK> +0x9457 0x57DC # <CJK> +0x9458 0x56A2 # <CJK> +0x9459 0x60A9 # <CJK> +0x945A 0x6FC3 # <CJK> +0x945B 0x7D0D # <CJK> +0x945C 0x80FD # <CJK> +0x945D 0x8133 # <CJK> +0x945E 0x81BF # <CJK> +0x945F 0x8FB2 # <CJK> +0x9460 0x8997 # <CJK> +0x9461 0x86A4 # <CJK> +0x9462 0x5DF4 # <CJK> +0x9463 0x628A # <CJK> +0x9464 0x64AD # <CJK> +0x9465 0x8987 # <CJK> +0x9466 0x6777 # <CJK> +0x9467 0x6CE2 # <CJK> +0x9468 0x6D3E # <CJK> +0x9469 0x7436 # <CJK> +0x946A 0x7834 # <CJK> +0x946B 0x5A46 # <CJK> +0x946C 0x7F75 # <CJK> +0x946D 0x82AD # <CJK> +0x946E 0x99AC # <CJK> +0x946F 0x4FF3 # <CJK> +0x9470 0x5EC3 # <CJK> +0x9471 0x62DD # <CJK> +0x9472 0x6392 # <CJK> +0x9473 0x6557 # <CJK> +0x9474 0x676F # <CJK> +0x9475 0x76C3 # <CJK> +0x9476 0x724C # <CJK> +0x9477 0x80CC # <CJK> +0x9478 0x80BA # <CJK> +0x9479 0x8F29 # <CJK> +0x947A 0x914D # <CJK> +0x947B 0x500D # <CJK> +0x947C 0x57F9 # <CJK> +0x947D 0x5A92 # <CJK> +0x947E 0x6885 # <CJK> +0x9480 0x6973 # <CJK> +0x9481 0x7164 # <CJK> +0x9482 0x72FD # <CJK> +0x9483 0x8CB7 # <CJK> +0x9484 0x58F2 # <CJK> +0x9485 0x8CE0 # <CJK> +0x9486 0x966A # <CJK> +0x9487 0x9019 # <CJK> +0x9488 0x877F # <CJK> +0x9489 0x79E4 # <CJK> +0x948A 0x77E7 # <CJK> +0x948B 0x8429 # <CJK> +0x948C 0x4F2F # <CJK> +0x948D 0x5265 # <CJK> +0x948E 0x535A # <CJK> +0x948F 0x62CD # <CJK> +0x9490 0x67CF # <CJK> +0x9491 0x6CCA # <CJK> +0x9492 0x767D # <CJK> +0x9493 0x7B94 # <CJK> +0x9494 0x7C95 # <CJK> +0x9495 0x8236 # <CJK> +0x9496 0x8584 # <CJK> +0x9497 0x8FEB # <CJK> +0x9498 0x66DD # <CJK> +0x9499 0x6F20 # <CJK> +0x949A 0x7206 # <CJK> +0x949B 0x7E1B # <CJK> +0x949C 0x83AB # <CJK> +0x949D 0x99C1 # <CJK> +0x949E 0x9EA6 # <CJK> +0x949F 0x51FD # <CJK> +0x94A0 0x7BB1 # <CJK> +0x94A1 0x7872 # <CJK> +0x94A2 0x7BB8 # <CJK> +0x94A3 0x8087 # <CJK> +0x94A4 0x7B48 # <CJK> +0x94A5 0x6AE8 # <CJK> +0x94A6 0x5E61 # <CJK> +0x94A7 0x808C # <CJK> +0x94A8 0x7551 # <CJK> +0x94A9 0x7560 # <CJK> +0x94AA 0x516B # <CJK> +0x94AB 0x9262 # <CJK> +0x94AC 0x6E8C # <CJK> +0x94AD 0x767A # <CJK> +0x94AE 0x9197 # <CJK> +0x94AF 0x9AEA # <CJK> +0x94B0 0x4F10 # <CJK> +0x94B1 0x7F70 # <CJK> +0x94B2 0x629C # <CJK> +0x94B3 0x7B4F # <CJK> +0x94B4 0x95A5 # <CJK> +0x94B5 0x9CE9 # <CJK> +0x94B6 0x567A # <CJK> +0x94B7 0x5859 # <CJK> +0x94B8 0x86E4 # <CJK> +0x94B9 0x96BC # <CJK> +0x94BA 0x4F34 # <CJK> +0x94BB 0x5224 # <CJK> +0x94BC 0x534A # <CJK> +0x94BD 0x53CD # <CJK> +0x94BE 0x53DB # <CJK> +0x94BF 0x5E06 # <CJK> +0x94C0 0x642C # <CJK> +0x94C1 0x6591 # <CJK> +0x94C2 0x677F # <CJK> +0x94C3 0x6C3E # <CJK> +0x94C4 0x6C4E # <CJK> +0x94C5 0x7248 # <CJK> +0x94C6 0x72AF # <CJK> +0x94C7 0x73ED # <CJK> +0x94C8 0x7554 # <CJK> +0x94C9 0x7E41 # <CJK> +0x94CA 0x822C # <CJK> +0x94CB 0x85E9 # <CJK> +0x94CC 0x8CA9 # <CJK> +0x94CD 0x7BC4 # <CJK> +0x94CE 0x91C6 # <CJK> +0x94CF 0x7169 # <CJK> +0x94D0 0x9812 # <CJK> +0x94D1 0x98EF # <CJK> +0x94D2 0x633D # <CJK> +0x94D3 0x6669 # <CJK> +0x94D4 0x756A # <CJK> +0x94D5 0x76E4 # <CJK> +0x94D6 0x78D0 # <CJK> +0x94D7 0x8543 # <CJK> +0x94D8 0x86EE # <CJK> +0x94D9 0x532A # <CJK> +0x94DA 0x5351 # <CJK> +0x94DB 0x5426 # <CJK> +0x94DC 0x5983 # <CJK> +0x94DD 0x5E87 # <CJK> +0x94DE 0x5F7C # <CJK> +0x94DF 0x60B2 # <CJK> +0x94E0 0x6249 # <CJK> +0x94E1 0x6279 # <CJK> +0x94E2 0x62AB # <CJK> +0x94E3 0x6590 # <CJK> +0x94E4 0x6BD4 # <CJK> +0x94E5 0x6CCC # <CJK> +0x94E6 0x75B2 # <CJK> +0x94E7 0x76AE # <CJK> +0x94E8 0x7891 # <CJK> +0x94E9 0x79D8 # <CJK> +0x94EA 0x7DCB # <CJK> +0x94EB 0x7F77 # <CJK> +0x94EC 0x80A5 # <CJK> +0x94ED 0x88AB # <CJK> +0x94EE 0x8AB9 # <CJK> +0x94EF 0x8CBB # <CJK> +0x94F0 0x907F # <CJK> +0x94F1 0x975E # <CJK> +0x94F2 0x98DB # <CJK> +0x94F3 0x6A0B # <CJK> +0x94F4 0x7C38 # <CJK> +0x94F5 0x5099 # <CJK> +0x94F6 0x5C3E # <CJK> +0x94F7 0x5FAE # <CJK> +0x94F8 0x6787 # <CJK> +0x94F9 0x6BD8 # <CJK> +0x94FA 0x7435 # <CJK> +0x94FB 0x7709 # <CJK> +0x94FC 0x7F8E # <CJK> +0x9540 0x9F3B # <CJK> +0x9541 0x67CA # <CJK> +0x9542 0x7A17 # <CJK> +0x9543 0x5339 # <CJK> +0x9544 0x758B # <CJK> +0x9545 0x9AED # <CJK> +0x9546 0x5F66 # <CJK> +0x9547 0x819D # <CJK> +0x9548 0x83F1 # <CJK> +0x9549 0x8098 # <CJK> +0x954A 0x5F3C # <CJK> +0x954B 0x5FC5 # <CJK> +0x954C 0x7562 # <CJK> +0x954D 0x7B46 # <CJK> +0x954E 0x903C # <CJK> +0x954F 0x6867 # <CJK> +0x9550 0x59EB # <CJK> +0x9551 0x5A9B # <CJK> +0x9552 0x7D10 # <CJK> +0x9553 0x767E # <CJK> +0x9554 0x8B2C # <CJK> +0x9555 0x4FF5 # <CJK> +0x9556 0x5F6A # <CJK> +0x9557 0x6A19 # <CJK> +0x9558 0x6C37 # <CJK> +0x9559 0x6F02 # <CJK> +0x955A 0x74E2 # <CJK> +0x955B 0x7968 # <CJK> +0x955C 0x8868 # <CJK> +0x955D 0x8A55 # <CJK> +0x955E 0x8C79 # <CJK> +0x955F 0x5EDF # <CJK> +0x9560 0x63CF # <CJK> +0x9561 0x75C5 # <CJK> +0x9562 0x79D2 # <CJK> +0x9563 0x82D7 # <CJK> +0x9564 0x9328 # <CJK> +0x9565 0x92F2 # <CJK> +0x9566 0x849C # <CJK> +0x9567 0x86ED # <CJK> +0x9568 0x9C2D # <CJK> +0x9569 0x54C1 # <CJK> +0x956A 0x5F6C # <CJK> +0x956B 0x658C # <CJK> +0x956C 0x6D5C # <CJK> +0x956D 0x7015 # <CJK> +0x956E 0x8CA7 # <CJK> +0x956F 0x8CD3 # <CJK> +0x9570 0x983B # <CJK> +0x9571 0x654F # <CJK> +0x9572 0x74F6 # <CJK> +0x9573 0x4E0D # <CJK> +0x9574 0x4ED8 # <CJK> +0x9575 0x57E0 # <CJK> +0x9576 0x592B # <CJK> +0x9577 0x5A66 # <CJK> +0x9578 0x5BCC # <CJK> +0x9579 0x51A8 # <CJK> +0x957A 0x5E03 # <CJK> +0x957B 0x5E9C # <CJK> +0x957C 0x6016 # <CJK> +0x957D 0x6276 # <CJK> +0x957E 0x6577 # <CJK> +0x9580 0x65A7 # <CJK> +0x9581 0x666E # <CJK> +0x9582 0x6D6E # <CJK> +0x9583 0x7236 # <CJK> +0x9584 0x7B26 # <CJK> +0x9585 0x8150 # <CJK> +0x9586 0x819A # <CJK> +0x9587 0x8299 # <CJK> +0x9588 0x8B5C # <CJK> +0x9589 0x8CA0 # <CJK> +0x958A 0x8CE6 # <CJK> +0x958B 0x8D74 # <CJK> +0x958C 0x961C # <CJK> +0x958D 0x9644 # <CJK> +0x958E 0x4FAE # <CJK> +0x958F 0x64AB # <CJK> +0x9590 0x6B66 # <CJK> +0x9591 0x821E # <CJK> +0x9592 0x8461 # <CJK> +0x9593 0x856A # <CJK> +0x9594 0x90E8 # <CJK> +0x9595 0x5C01 # <CJK> +0x9596 0x6953 # <CJK> +0x9597 0x98A8 # <CJK> +0x9598 0x847A # <CJK> +0x9599 0x8557 # <CJK> +0x959A 0x4F0F # <CJK> +0x959B 0x526F # <CJK> +0x959C 0x5FA9 # <CJK> +0x959D 0x5E45 # <CJK> +0x959E 0x670D # <CJK> +0x959F 0x798F # <CJK> +0x95A0 0x8179 # <CJK> +0x95A1 0x8907 # <CJK> +0x95A2 0x8986 # <CJK> +0x95A3 0x6DF5 # <CJK> +0x95A4 0x5F17 # <CJK> +0x95A5 0x6255 # <CJK> +0x95A6 0x6CB8 # <CJK> +0x95A7 0x4ECF # <CJK> +0x95A8 0x7269 # <CJK> +0x95A9 0x9B92 # <CJK> +0x95AA 0x5206 # <CJK> +0x95AB 0x543B # <CJK> +0x95AC 0x5674 # <CJK> +0x95AD 0x58B3 # <CJK> +0x95AE 0x61A4 # <CJK> +0x95AF 0x626E # <CJK> +0x95B0 0x711A # <CJK> +0x95B1 0x596E # <CJK> +0x95B2 0x7C89 # <CJK> +0x95B3 0x7CDE # <CJK> +0x95B4 0x7D1B # <CJK> +0x95B5 0x96F0 # <CJK> +0x95B6 0x6587 # <CJK> +0x95B7 0x805E # <CJK> +0x95B8 0x4E19 # <CJK> +0x95B9 0x4F75 # <CJK> +0x95BA 0x5175 # <CJK> +0x95BB 0x5840 # <CJK> +0x95BC 0x5E63 # <CJK> +0x95BD 0x5E73 # <CJK> +0x95BE 0x5F0A # <CJK> +0x95BF 0x67C4 # <CJK> +0x95C0 0x4E26 # <CJK> +0x95C1 0x853D # <CJK> +0x95C2 0x9589 # <CJK> +0x95C3 0x965B # <CJK> +0x95C4 0x7C73 # <CJK> +0x95C5 0x9801 # <CJK> +0x95C6 0x50FB # <CJK> +0x95C7 0x58C1 # <CJK> +0x95C8 0x7656 # <CJK> +0x95C9 0x78A7 # <CJK> +0x95CA 0x5225 # <CJK> +0x95CB 0x77A5 # <CJK> +0x95CC 0x8511 # <CJK> +0x95CD 0x7B86 # <CJK> +0x95CE 0x504F # <CJK> +0x95CF 0x5909 # <CJK> +0x95D0 0x7247 # <CJK> +0x95D1 0x7BC7 # <CJK> +0x95D2 0x7DE8 # <CJK> +0x95D3 0x8FBA # <CJK> +0x95D4 0x8FD4 # <CJK> +0x95D5 0x904D # <CJK> +0x95D6 0x4FBF # <CJK> +0x95D7 0x52C9 # <CJK> +0x95D8 0x5A29 # <CJK> +0x95D9 0x5F01 # <CJK> +0x95DA 0x97AD # <CJK> +0x95DB 0x4FDD # <CJK> +0x95DC 0x8217 # <CJK> +0x95DD 0x92EA # <CJK> +0x95DE 0x5703 # <CJK> +0x95DF 0x6355 # <CJK> +0x95E0 0x6B69 # <CJK> +0x95E1 0x752B # <CJK> +0x95E2 0x88DC # <CJK> +0x95E3 0x8F14 # <CJK> +0x95E4 0x7A42 # <CJK> +0x95E5 0x52DF # <CJK> +0x95E6 0x5893 # <CJK> +0x95E7 0x6155 # <CJK> +0x95E8 0x620A # <CJK> +0x95E9 0x66AE # <CJK> +0x95EA 0x6BCD # <CJK> +0x95EB 0x7C3F # <CJK> +0x95EC 0x83E9 # <CJK> +0x95ED 0x5023 # <CJK> +0x95EE 0x4FF8 # <CJK> +0x95EF 0x5305 # <CJK> +0x95F0 0x5446 # <CJK> +0x95F1 0x5831 # <CJK> +0x95F2 0x5949 # <CJK> +0x95F3 0x5B9D # <CJK> +0x95F4 0x5CF0 # <CJK> +0x95F5 0x5CEF # <CJK> +0x95F6 0x5D29 # <CJK> +0x95F7 0x5E96 # <CJK> +0x95F8 0x62B1 # <CJK> +0x95F9 0x6367 # <CJK> +0x95FA 0x653E # <CJK> +0x95FB 0x65B9 # <CJK> +0x95FC 0x670B # <CJK> +0x9640 0x6CD5 # <CJK> +0x9641 0x6CE1 # <CJK> +0x9642 0x70F9 # <CJK> +0x9643 0x7832 # <CJK> +0x9644 0x7E2B # <CJK> +0x9645 0x80DE # <CJK> +0x9646 0x82B3 # <CJK> +0x9647 0x840C # <CJK> +0x9648 0x84EC # <CJK> +0x9649 0x8702 # <CJK> +0x964A 0x8912 # <CJK> +0x964B 0x8A2A # <CJK> +0x964C 0x8C4A # <CJK> +0x964D 0x90A6 # <CJK> +0x964E 0x92D2 # <CJK> +0x964F 0x98FD # <CJK> +0x9650 0x9CF3 # <CJK> +0x9651 0x9D6C # <CJK> +0x9652 0x4E4F # <CJK> +0x9653 0x4EA1 # <CJK> +0x9654 0x508D # <CJK> +0x9655 0x5256 # <CJK> +0x9656 0x574A # <CJK> +0x9657 0x59A8 # <CJK> +0x9658 0x5E3D # <CJK> +0x9659 0x5FD8 # <CJK> +0x965A 0x5FD9 # <CJK> +0x965B 0x623F # <CJK> +0x965C 0x66B4 # <CJK> +0x965D 0x671B # <CJK> +0x965E 0x67D0 # <CJK> +0x965F 0x68D2 # <CJK> +0x9660 0x5192 # <CJK> +0x9661 0x7D21 # <CJK> +0x9662 0x80AA # <CJK> +0x9663 0x81A8 # <CJK> +0x9664 0x8B00 # <CJK> +0x9665 0x8C8C # <CJK> +0x9666 0x8CBF # <CJK> +0x9667 0x927E # <CJK> +0x9668 0x9632 # <CJK> +0x9669 0x5420 # <CJK> +0x966A 0x982C # <CJK> +0x966B 0x5317 # <CJK> +0x966C 0x50D5 # <CJK> +0x966D 0x535C # <CJK> +0x966E 0x58A8 # <CJK> +0x966F 0x64B2 # <CJK> +0x9670 0x6734 # <CJK> +0x9671 0x7267 # <CJK> +0x9672 0x7766 # <CJK> +0x9673 0x7A46 # <CJK> +0x9674 0x91E6 # <CJK> +0x9675 0x52C3 # <CJK> +0x9676 0x6CA1 # <CJK> +0x9677 0x6B86 # <CJK> +0x9678 0x5800 # <CJK> +0x9679 0x5E4C # <CJK> +0x967A 0x5954 # <CJK> +0x967B 0x672C # <CJK> +0x967C 0x7FFB # <CJK> +0x967D 0x51E1 # <CJK> +0x967E 0x76C6 # <CJK> +0x9680 0x6469 # <CJK> +0x9681 0x78E8 # <CJK> +0x9682 0x9B54 # <CJK> +0x9683 0x9EBB # <CJK> +0x9684 0x57CB # <CJK> +0x9685 0x59B9 # <CJK> +0x9686 0x6627 # <CJK> +0x9687 0x679A # <CJK> +0x9688 0x6BCE # <CJK> +0x9689 0x54E9 # <CJK> +0x968A 0x69D9 # <CJK> +0x968B 0x5E55 # <CJK> +0x968C 0x819C # <CJK> +0x968D 0x6795 # <CJK> +0x968E 0x9BAA # <CJK> +0x968F 0x67FE # <CJK> +0x9690 0x9C52 # <CJK> +0x9691 0x685D # <CJK> +0x9692 0x4EA6 # <CJK> +0x9693 0x4FE3 # <CJK> +0x9694 0x53C8 # <CJK> +0x9695 0x62B9 # <CJK> +0x9696 0x672B # <CJK> +0x9697 0x6CAB # <CJK> +0x9698 0x8FC4 # <CJK> +0x9699 0x4FAD # <CJK> +0x969A 0x7E6D # <CJK> +0x969B 0x9EBF # <CJK> +0x969C 0x4E07 # <CJK> +0x969D 0x6162 # <CJK> +0x969E 0x6E80 # <CJK> +0x969F 0x6F2B # <CJK> +0x96A0 0x8513 # <CJK> +0x96A1 0x5473 # <CJK> +0x96A2 0x672A # <CJK> +0x96A3 0x9B45 # <CJK> +0x96A4 0x5DF3 # <CJK> +0x96A5 0x7B95 # <CJK> +0x96A6 0x5CAC # <CJK> +0x96A7 0x5BC6 # <CJK> +0x96A8 0x871C # <CJK> +0x96A9 0x6E4A # <CJK> +0x96AA 0x84D1 # <CJK> +0x96AB 0x7A14 # <CJK> +0x96AC 0x8108 # <CJK> +0x96AD 0x5999 # <CJK> +0x96AE 0x7C8D # <CJK> +0x96AF 0x6C11 # <CJK> +0x96B0 0x7720 # <CJK> +0x96B1 0x52D9 # <CJK> +0x96B2 0x5922 # <CJK> +0x96B3 0x7121 # <CJK> +0x96B4 0x725F # <CJK> +0x96B5 0x77DB # <CJK> +0x96B6 0x9727 # <CJK> +0x96B7 0x9D61 # <CJK> +0x96B8 0x690B # <CJK> +0x96B9 0x5A7F # <CJK> +0x96BA 0x5A18 # <CJK> +0x96BB 0x51A5 # <CJK> +0x96BC 0x540D # <CJK> +0x96BD 0x547D # <CJK> +0x96BE 0x660E # <CJK> +0x96BF 0x76DF # <CJK> +0x96C0 0x8FF7 # <CJK> +0x96C1 0x9298 # <CJK> +0x96C2 0x9CF4 # <CJK> +0x96C3 0x59EA # <CJK> +0x96C4 0x725D # <CJK> +0x96C5 0x6EC5 # <CJK> +0x96C6 0x514D # <CJK> +0x96C7 0x68C9 # <CJK> +0x96C8 0x7DBF # <CJK> +0x96C9 0x7DEC # <CJK> +0x96CA 0x9762 # <CJK> +0x96CB 0x9EBA # <CJK> +0x96CC 0x6478 # <CJK> +0x96CD 0x6A21 # <CJK> +0x96CE 0x8302 # <CJK> +0x96CF 0x5984 # <CJK> +0x96D0 0x5B5F # <CJK> +0x96D1 0x6BDB # <CJK> +0x96D2 0x731B # <CJK> +0x96D3 0x76F2 # <CJK> +0x96D4 0x7DB2 # <CJK> +0x96D5 0x8017 # <CJK> +0x96D6 0x8499 # <CJK> +0x96D7 0x5132 # <CJK> +0x96D8 0x6728 # <CJK> +0x96D9 0x9ED9 # <CJK> +0x96DA 0x76EE # <CJK> +0x96DB 0x6762 # <CJK> +0x96DC 0x52FF # <CJK> +0x96DD 0x9905 # <CJK> +0x96DE 0x5C24 # <CJK> +0x96DF 0x623B # <CJK> +0x96E0 0x7C7E # <CJK> +0x96E1 0x8CB0 # <CJK> +0x96E2 0x554F # <CJK> +0x96E3 0x60B6 # <CJK> +0x96E4 0x7D0B # <CJK> +0x96E5 0x9580 # <CJK> +0x96E6 0x5301 # <CJK> +0x96E7 0x4E5F # <CJK> +0x96E8 0x51B6 # <CJK> +0x96E9 0x591C # <CJK> +0x96EA 0x723A # <CJK> +0x96EB 0x8036 # <CJK> +0x96EC 0x91CE # <CJK> +0x96ED 0x5F25 # <CJK> +0x96EE 0x77E2 # <CJK> +0x96EF 0x5384 # <CJK> +0x96F0 0x5F79 # <CJK> +0x96F1 0x7D04 # <CJK> +0x96F2 0x85AC # <CJK> +0x96F3 0x8A33 # <CJK> +0x96F4 0x8E8D # <CJK> +0x96F5 0x9756 # <CJK> +0x96F6 0x67F3 # <CJK> +0x96F7 0x85AE # <CJK> +0x96F8 0x9453 # <CJK> +0x96F9 0x6109 # <CJK> +0x96FA 0x6108 # <CJK> +0x96FB 0x6CB9 # <CJK> +0x96FC 0x7652 # <CJK> +0x9740 0x8AED # <CJK> +0x9741 0x8F38 # <CJK> +0x9742 0x552F # <CJK> +0x9743 0x4F51 # <CJK> +0x9744 0x512A # <CJK> +0x9745 0x52C7 # <CJK> +0x9746 0x53CB # <CJK> +0x9747 0x5BA5 # <CJK> +0x9748 0x5E7D # <CJK> +0x9749 0x60A0 # <CJK> +0x974A 0x6182 # <CJK> +0x974B 0x63D6 # <CJK> +0x974C 0x6709 # <CJK> +0x974D 0x67DA # <CJK> +0x974E 0x6E67 # <CJK> +0x974F 0x6D8C # <CJK> +0x9750 0x7336 # <CJK> +0x9751 0x7337 # <CJK> +0x9752 0x7531 # <CJK> +0x9753 0x7950 # <CJK> +0x9754 0x88D5 # <CJK> +0x9755 0x8A98 # <CJK> +0x9756 0x904A # <CJK> +0x9757 0x9091 # <CJK> +0x9758 0x90F5 # <CJK> +0x9759 0x96C4 # <CJK> +0x975A 0x878D # <CJK> +0x975B 0x5915 # <CJK> +0x975C 0x4E88 # <CJK> +0x975D 0x4F59 # <CJK> +0x975E 0x4E0E # <CJK> +0x975F 0x8A89 # <CJK> +0x9760 0x8F3F # <CJK> +0x9761 0x9810 # <CJK> +0x9762 0x50AD # <CJK> +0x9763 0x5E7C # <CJK> +0x9764 0x5996 # <CJK> +0x9765 0x5BB9 # <CJK> +0x9766 0x5EB8 # <CJK> +0x9767 0x63DA # <CJK> +0x9768 0x63FA # <CJK> +0x9769 0x64C1 # <CJK> +0x976A 0x66DC # <CJK> +0x976B 0x694A # <CJK> +0x976C 0x69D8 # <CJK> +0x976D 0x6D0B # <CJK> +0x976E 0x6EB6 # <CJK> +0x976F 0x7194 # <CJK> +0x9770 0x7528 # <CJK> +0x9771 0x7AAF # <CJK> +0x9772 0x7F8A # <CJK> +0x9773 0x8000 # <CJK> +0x9774 0x8449 # <CJK> +0x9775 0x84C9 # <CJK> +0x9776 0x8981 # <CJK> +0x9777 0x8B21 # <CJK> +0x9778 0x8E0A # <CJK> +0x9779 0x9065 # <CJK> +0x977A 0x967D # <CJK> +0x977B 0x990A # <CJK> +0x977C 0x617E # <CJK> +0x977D 0x6291 # <CJK> +0x977E 0x6B32 # <CJK> +0x9780 0x6C83 # <CJK> +0x9781 0x6D74 # <CJK> +0x9782 0x7FCC # <CJK> +0x9783 0x7FFC # <CJK> +0x9784 0x6DC0 # <CJK> +0x9785 0x7F85 # <CJK> +0x9786 0x87BA # <CJK> +0x9787 0x88F8 # <CJK> +0x9788 0x6765 # <CJK> +0x9789 0x83B1 # <CJK> +0x978A 0x983C # <CJK> +0x978B 0x96F7 # <CJK> +0x978C 0x6D1B # <CJK> +0x978D 0x7D61 # <CJK> +0x978E 0x843D # <CJK> +0x978F 0x916A # <CJK> +0x9790 0x4E71 # <CJK> +0x9791 0x5375 # <CJK> +0x9792 0x5D50 # <CJK> +0x9793 0x6B04 # <CJK> +0x9794 0x6FEB # <CJK> +0x9795 0x85CD # <CJK> +0x9796 0x862D # <CJK> +0x9797 0x89A7 # <CJK> +0x9798 0x5229 # <CJK> +0x9799 0x540F # <CJK> +0x979A 0x5C65 # <CJK> +0x979B 0x674E # <CJK> +0x979C 0x68A8 # <CJK> +0x979D 0x7406 # <CJK> +0x979E 0x7483 # <CJK> +0x979F 0x75E2 # <CJK> +0x97A0 0x88CF # <CJK> +0x97A1 0x88E1 # <CJK> +0x97A2 0x91CC # <CJK> +0x97A3 0x96E2 # <CJK> +0x97A4 0x9678 # <CJK> +0x97A5 0x5F8B # <CJK> +0x97A6 0x7387 # <CJK> +0x97A7 0x7ACB # <CJK> +0x97A8 0x844E # <CJK> +0x97A9 0x63A0 # <CJK> +0x97AA 0x7565 # <CJK> +0x97AB 0x5289 # <CJK> +0x97AC 0x6D41 # <CJK> +0x97AD 0x6E9C # <CJK> +0x97AE 0x7409 # <CJK> +0x97AF 0x7559 # <CJK> +0x97B0 0x786B # <CJK> +0x97B1 0x7C92 # <CJK> +0x97B2 0x9686 # <CJK> +0x97B3 0x7ADC # <CJK> +0x97B4 0x9F8D # <CJK> +0x97B5 0x4FB6 # <CJK> +0x97B6 0x616E # <CJK> +0x97B7 0x65C5 # <CJK> +0x97B8 0x865C # <CJK> +0x97B9 0x4E86 # <CJK> +0x97BA 0x4EAE # <CJK> +0x97BB 0x50DA # <CJK> +0x97BC 0x4E21 # <CJK> +0x97BD 0x51CC # <CJK> +0x97BE 0x5BEE # <CJK> +0x97BF 0x6599 # <CJK> +0x97C0 0x6881 # <CJK> +0x97C1 0x6DBC # <CJK> +0x97C2 0x731F # <CJK> +0x97C3 0x7642 # <CJK> +0x97C4 0x77AD # <CJK> +0x97C5 0x7A1C # <CJK> +0x97C6 0x7CE7 # <CJK> +0x97C7 0x826F # <CJK> +0x97C8 0x8AD2 # <CJK> +0x97C9 0x907C # <CJK> +0x97CA 0x91CF # <CJK> +0x97CB 0x9675 # <CJK> +0x97CC 0x9818 # <CJK> +0x97CD 0x529B # <CJK> +0x97CE 0x7DD1 # <CJK> +0x97CF 0x502B # <CJK> +0x97D0 0x5398 # <CJK> +0x97D1 0x6797 # <CJK> +0x97D2 0x6DCB # <CJK> +0x97D3 0x71D0 # <CJK> +0x97D4 0x7433 # <CJK> +0x97D5 0x81E8 # <CJK> +0x97D6 0x8F2A # <CJK> +0x97D7 0x96A3 # <CJK> +0x97D8 0x9C57 # <CJK> +0x97D9 0x9E9F # <CJK> +0x97DA 0x7460 # <CJK> +0x97DB 0x5841 # <CJK> +0x97DC 0x6D99 # <CJK> +0x97DD 0x7D2F # <CJK> +0x97DE 0x985E # <CJK> +0x97DF 0x4EE4 # <CJK> +0x97E0 0x4F36 # <CJK> +0x97E1 0x4F8B # <CJK> +0x97E2 0x51B7 # <CJK> +0x97E3 0x52B1 # <CJK> +0x97E4 0x5DBA # <CJK> +0x97E5 0x601C # <CJK> +0x97E6 0x73B2 # <CJK> +0x97E7 0x793C # <CJK> +0x97E8 0x82D3 # <CJK> +0x97E9 0x9234 # <CJK> +0x97EA 0x96B7 # <CJK> +0x97EB 0x96F6 # <CJK> +0x97EC 0x970A # <CJK> +0x97ED 0x9E97 # <CJK> +0x97EE 0x9F62 # <CJK> +0x97EF 0x66A6 # <CJK> +0x97F0 0x6B74 # <CJK> +0x97F1 0x5217 # <CJK> +0x97F2 0x52A3 # <CJK> +0x97F3 0x70C8 # <CJK> +0x97F4 0x88C2 # <CJK> +0x97F5 0x5EC9 # <CJK> +0x97F6 0x604B # <CJK> +0x97F7 0x6190 # <CJK> +0x97F8 0x6F23 # <CJK> +0x97F9 0x7149 # <CJK> +0x97FA 0x7C3E # <CJK> +0x97FB 0x7DF4 # <CJK> +0x97FC 0x806F # <CJK> +0x9840 0x84EE # <CJK> +0x9841 0x9023 # <CJK> +0x9842 0x932C # <CJK> +0x9843 0x5442 # <CJK> +0x9844 0x9B6F # <CJK> +0x9845 0x6AD3 # <CJK> +0x9846 0x7089 # <CJK> +0x9847 0x8CC2 # <CJK> +0x9848 0x8DEF # <CJK> +0x9849 0x9732 # <CJK> +0x984A 0x52B4 # <CJK> +0x984B 0x5A41 # <CJK> +0x984C 0x5ECA # <CJK> +0x984D 0x5F04 # <CJK> +0x984E 0x6717 # <CJK> +0x984F 0x697C # <CJK> +0x9850 0x6994 # <CJK> +0x9851 0x6D6A # <CJK> +0x9852 0x6F0F # <CJK> +0x9853 0x7262 # <CJK> +0x9854 0x72FC # <CJK> +0x9855 0x7BED # <CJK> +0x9856 0x8001 # <CJK> +0x9857 0x807E # <CJK> +0x9858 0x874B # <CJK> +0x9859 0x90CE # <CJK> +0x985A 0x516D # <CJK> +0x985B 0x9E93 # <CJK> +0x985C 0x7984 # <CJK> +0x985D 0x808B # <CJK> +0x985E 0x9332 # <CJK> +0x985F 0x8AD6 # <CJK> +0x9860 0x502D # <CJK> +0x9861 0x548C # <CJK> +0x9862 0x8A71 # <CJK> +0x9863 0x6B6A # <CJK> +0x9864 0x8CC4 # <CJK> +0x9865 0x8107 # <CJK> +0x9866 0x60D1 # <CJK> +0x9867 0x67A0 # <CJK> +0x9868 0x9DF2 # <CJK> +0x9869 0x4E99 # <CJK> +0x986A 0x4E98 # <CJK> +0x986B 0x9C10 # <CJK> +0x986C 0x8A6B # <CJK> +0x986D 0x85C1 # <CJK> +0x986E 0x8568 # <CJK> +0x986F 0x6900 # <CJK> +0x9870 0x6E7E # <CJK> +0x9871 0x7897 # <CJK> +0x9872 0x8155 # <CJK> +0x989F 0x5F0C # <CJK> +0x98A0 0x4E10 # <CJK> +0x98A1 0x4E15 # <CJK> +0x98A2 0x4E2A # <CJK> +0x98A3 0x4E31 # <CJK> +0x98A4 0x4E36 # <CJK> +0x98A5 0x4E3C # <CJK> +0x98A6 0x4E3F # <CJK> +0x98A7 0x4E42 # <CJK> +0x98A8 0x4E56 # <CJK> +0x98A9 0x4E58 # <CJK> +0x98AA 0x4E82 # <CJK> +0x98AB 0x4E85 # <CJK> +0x98AC 0x8C6B # <CJK> +0x98AD 0x4E8A # <CJK> +0x98AE 0x8212 # <CJK> +0x98AF 0x5F0D # <CJK> +0x98B0 0x4E8E # <CJK> +0x98B1 0x4E9E # <CJK> +0x98B2 0x4E9F # <CJK> +0x98B3 0x4EA0 # <CJK> +0x98B4 0x4EA2 # <CJK> +0x98B5 0x4EB0 # <CJK> +0x98B6 0x4EB3 # <CJK> +0x98B7 0x4EB6 # <CJK> +0x98B8 0x4ECE # <CJK> +0x98B9 0x4ECD # <CJK> +0x98BA 0x4EC4 # <CJK> +0x98BB 0x4EC6 # <CJK> +0x98BC 0x4EC2 # <CJK> +0x98BD 0x4ED7 # <CJK> +0x98BE 0x4EDE # <CJK> +0x98BF 0x4EED # <CJK> +0x98C0 0x4EDF # <CJK> +0x98C1 0x4EF7 # <CJK> +0x98C2 0x4F09 # <CJK> +0x98C3 0x4F5A # <CJK> +0x98C4 0x4F30 # <CJK> +0x98C5 0x4F5B # <CJK> +0x98C6 0x4F5D # <CJK> +0x98C7 0x4F57 # <CJK> +0x98C8 0x4F47 # <CJK> +0x98C9 0x4F76 # <CJK> +0x98CA 0x4F88 # <CJK> +0x98CB 0x4F8F # <CJK> +0x98CC 0x4F98 # <CJK> +0x98CD 0x4F7B # <CJK> +0x98CE 0x4F69 # <CJK> +0x98CF 0x4F70 # <CJK> +0x98D0 0x4F91 # <CJK> +0x98D1 0x4F6F # <CJK> +0x98D2 0x4F86 # <CJK> +0x98D3 0x4F96 # <CJK> +0x98D4 0x5118 # <CJK> +0x98D5 0x4FD4 # <CJK> +0x98D6 0x4FDF # <CJK> +0x98D7 0x4FCE # <CJK> +0x98D8 0x4FD8 # <CJK> +0x98D9 0x4FDB # <CJK> +0x98DA 0x4FD1 # <CJK> +0x98DB 0x4FDA # <CJK> +0x98DC 0x4FD0 # <CJK> +0x98DD 0x4FE4 # <CJK> +0x98DE 0x4FE5 # <CJK> +0x98DF 0x501A # <CJK> +0x98E0 0x5028 # <CJK> +0x98E1 0x5014 # <CJK> +0x98E2 0x502A # <CJK> +0x98E3 0x5025 # <CJK> +0x98E4 0x5005 # <CJK> +0x98E5 0x4F1C # <CJK> +0x98E6 0x4FF6 # <CJK> +0x98E7 0x5021 # <CJK> +0x98E8 0x5029 # <CJK> +0x98E9 0x502C # <CJK> +0x98EA 0x4FFE # <CJK> +0x98EB 0x4FEF # <CJK> +0x98EC 0x5011 # <CJK> +0x98ED 0x5006 # <CJK> +0x98EE 0x5043 # <CJK> +0x98EF 0x5047 # <CJK> +0x98F0 0x6703 # <CJK> +0x98F1 0x5055 # <CJK> +0x98F2 0x5050 # <CJK> +0x98F3 0x5048 # <CJK> +0x98F4 0x505A # <CJK> +0x98F5 0x5056 # <CJK> +0x98F6 0x506C # <CJK> +0x98F7 0x5078 # <CJK> +0x98F8 0x5080 # <CJK> +0x98F9 0x509A # <CJK> +0x98FA 0x5085 # <CJK> +0x98FB 0x50B4 # <CJK> +0x98FC 0x50B2 # <CJK> +0x9940 0x50C9 # <CJK> +0x9941 0x50CA # <CJK> +0x9942 0x50B3 # <CJK> +0x9943 0x50C2 # <CJK> +0x9944 0x50D6 # <CJK> +0x9945 0x50DE # <CJK> +0x9946 0x50E5 # <CJK> +0x9947 0x50ED # <CJK> +0x9948 0x50E3 # <CJK> +0x9949 0x50EE # <CJK> +0x994A 0x50F9 # <CJK> +0x994B 0x50F5 # <CJK> +0x994C 0x5109 # <CJK> +0x994D 0x5101 # <CJK> +0x994E 0x5102 # <CJK> +0x994F 0x5116 # <CJK> +0x9950 0x5115 # <CJK> +0x9951 0x5114 # <CJK> +0x9952 0x511A # <CJK> +0x9953 0x5121 # <CJK> +0x9954 0x513A # <CJK> +0x9955 0x5137 # <CJK> +0x9956 0x513C # <CJK> +0x9957 0x513B # <CJK> +0x9958 0x513F # <CJK> +0x9959 0x5140 # <CJK> +0x995A 0x5152 # <CJK> +0x995B 0x514C # <CJK> +0x995C 0x5154 # <CJK> +0x995D 0x5162 # <CJK> +0x995E 0x7AF8 # <CJK> +0x995F 0x5169 # <CJK> +0x9960 0x516A # <CJK> +0x9961 0x516E # <CJK> +0x9962 0x5180 # <CJK> +0x9963 0x5182 # <CJK> +0x9964 0x56D8 # <CJK> +0x9965 0x518C # <CJK> +0x9966 0x5189 # <CJK> +0x9967 0x518F # <CJK> +0x9968 0x5191 # <CJK> +0x9969 0x5193 # <CJK> +0x996A 0x5195 # <CJK> +0x996B 0x5196 # <CJK> +0x996C 0x51A4 # <CJK> +0x996D 0x51A6 # <CJK> +0x996E 0x51A2 # <CJK> +0x996F 0x51A9 # <CJK> +0x9970 0x51AA # <CJK> +0x9971 0x51AB # <CJK> +0x9972 0x51B3 # <CJK> +0x9973 0x51B1 # <CJK> +0x9974 0x51B2 # <CJK> +0x9975 0x51B0 # <CJK> +0x9976 0x51B5 # <CJK> +0x9977 0x51BD # <CJK> +0x9978 0x51C5 # <CJK> +0x9979 0x51C9 # <CJK> +0x997A 0x51DB # <CJK> +0x997B 0x51E0 # <CJK> +0x997C 0x8655 # <CJK> +0x997D 0x51E9 # <CJK> +0x997E 0x51ED # <CJK> +0x9980 0x51F0 # <CJK> +0x9981 0x51F5 # <CJK> +0x9982 0x51FE # <CJK> +0x9983 0x5204 # <CJK> +0x9984 0x520B # <CJK> +0x9985 0x5214 # <CJK> +0x9986 0x520E # <CJK> +0x9987 0x5227 # <CJK> +0x9988 0x522A # <CJK> +0x9989 0x522E # <CJK> +0x998A 0x5233 # <CJK> +0x998B 0x5239 # <CJK> +0x998C 0x524F # <CJK> +0x998D 0x5244 # <CJK> +0x998E 0x524B # <CJK> +0x998F 0x524C # <CJK> +0x9990 0x525E # <CJK> +0x9991 0x5254 # <CJK> +0x9992 0x526A # <CJK> +0x9993 0x5274 # <CJK> +0x9994 0x5269 # <CJK> +0x9995 0x5273 # <CJK> +0x9996 0x527F # <CJK> +0x9997 0x527D # <CJK> +0x9998 0x528D # <CJK> +0x9999 0x5294 # <CJK> +0x999A 0x5292 # <CJK> +0x999B 0x5271 # <CJK> +0x999C 0x5288 # <CJK> +0x999D 0x5291 # <CJK> +0x999E 0x8FA8 # <CJK> +0x999F 0x8FA7 # <CJK> +0x99A0 0x52AC # <CJK> +0x99A1 0x52AD # <CJK> +0x99A2 0x52BC # <CJK> +0x99A3 0x52B5 # <CJK> +0x99A4 0x52C1 # <CJK> +0x99A5 0x52CD # <CJK> +0x99A6 0x52D7 # <CJK> +0x99A7 0x52DE # <CJK> +0x99A8 0x52E3 # <CJK> +0x99A9 0x52E6 # <CJK> +0x99AA 0x98ED # <CJK> +0x99AB 0x52E0 # <CJK> +0x99AC 0x52F3 # <CJK> +0x99AD 0x52F5 # <CJK> +0x99AE 0x52F8 # <CJK> +0x99AF 0x52F9 # <CJK> +0x99B0 0x5306 # <CJK> +0x99B1 0x5308 # <CJK> +0x99B2 0x7538 # <CJK> +0x99B3 0x530D # <CJK> +0x99B4 0x5310 # <CJK> +0x99B5 0x530F # <CJK> +0x99B6 0x5315 # <CJK> +0x99B7 0x531A # <CJK> +0x99B8 0x5323 # <CJK> +0x99B9 0x532F # <CJK> +0x99BA 0x5331 # <CJK> +0x99BB 0x5333 # <CJK> +0x99BC 0x5338 # <CJK> +0x99BD 0x5340 # <CJK> +0x99BE 0x5346 # <CJK> +0x99BF 0x5345 # <CJK> +0x99C0 0x4E17 # <CJK> +0x99C1 0x5349 # <CJK> +0x99C2 0x534D # <CJK> +0x99C3 0x51D6 # <CJK> +0x99C4 0x535E # <CJK> +0x99C5 0x5369 # <CJK> +0x99C6 0x536E # <CJK> +0x99C7 0x5918 # <CJK> +0x99C8 0x537B # <CJK> +0x99C9 0x5377 # <CJK> +0x99CA 0x5382 # <CJK> +0x99CB 0x5396 # <CJK> +0x99CC 0x53A0 # <CJK> +0x99CD 0x53A6 # <CJK> +0x99CE 0x53A5 # <CJK> +0x99CF 0x53AE # <CJK> +0x99D0 0x53B0 # <CJK> +0x99D1 0x53B6 # <CJK> +0x99D2 0x53C3 # <CJK> +0x99D3 0x7C12 # <CJK> +0x99D4 0x96D9 # <CJK> +0x99D5 0x53DF # <CJK> +0x99D6 0x66FC # <CJK> +0x99D7 0x71EE # <CJK> +0x99D8 0x53EE # <CJK> +0x99D9 0x53E8 # <CJK> +0x99DA 0x53ED # <CJK> +0x99DB 0x53FA # <CJK> +0x99DC 0x5401 # <CJK> +0x99DD 0x543D # <CJK> +0x99DE 0x5440 # <CJK> +0x99DF 0x542C # <CJK> +0x99E0 0x542D # <CJK> +0x99E1 0x543C # <CJK> +0x99E2 0x542E # <CJK> +0x99E3 0x5436 # <CJK> +0x99E4 0x5429 # <CJK> +0x99E5 0x541D # <CJK> +0x99E6 0x544E # <CJK> +0x99E7 0x548F # <CJK> +0x99E8 0x5475 # <CJK> +0x99E9 0x548E # <CJK> +0x99EA 0x545F # <CJK> +0x99EB 0x5471 # <CJK> +0x99EC 0x5477 # <CJK> +0x99ED 0x5470 # <CJK> +0x99EE 0x5492 # <CJK> +0x99EF 0x547B # <CJK> +0x99F0 0x5480 # <CJK> +0x99F1 0x5476 # <CJK> +0x99F2 0x5484 # <CJK> +0x99F3 0x5490 # <CJK> +0x99F4 0x5486 # <CJK> +0x99F5 0x54C7 # <CJK> +0x99F6 0x54A2 # <CJK> +0x99F7 0x54B8 # <CJK> +0x99F8 0x54A5 # <CJK> +0x99F9 0x54AC # <CJK> +0x99FA 0x54C4 # <CJK> +0x99FB 0x54C8 # <CJK> +0x99FC 0x54A8 # <CJK> +0x9A40 0x54AB # <CJK> +0x9A41 0x54C2 # <CJK> +0x9A42 0x54A4 # <CJK> +0x9A43 0x54BE # <CJK> +0x9A44 0x54BC # <CJK> +0x9A45 0x54D8 # <CJK> +0x9A46 0x54E5 # <CJK> +0x9A47 0x54E6 # <CJK> +0x9A48 0x550F # <CJK> +0x9A49 0x5514 # <CJK> +0x9A4A 0x54FD # <CJK> +0x9A4B 0x54EE # <CJK> +0x9A4C 0x54ED # <CJK> +0x9A4D 0x54FA # <CJK> +0x9A4E 0x54E2 # <CJK> +0x9A4F 0x5539 # <CJK> +0x9A50 0x5540 # <CJK> +0x9A51 0x5563 # <CJK> +0x9A52 0x554C # <CJK> +0x9A53 0x552E # <CJK> +0x9A54 0x555C # <CJK> +0x9A55 0x5545 # <CJK> +0x9A56 0x5556 # <CJK> +0x9A57 0x5557 # <CJK> +0x9A58 0x5538 # <CJK> +0x9A59 0x5533 # <CJK> +0x9A5A 0x555D # <CJK> +0x9A5B 0x5599 # <CJK> +0x9A5C 0x5580 # <CJK> +0x9A5D 0x54AF # <CJK> +0x9A5E 0x558A # <CJK> +0x9A5F 0x559F # <CJK> +0x9A60 0x557B # <CJK> +0x9A61 0x557E # <CJK> +0x9A62 0x5598 # <CJK> +0x9A63 0x559E # <CJK> +0x9A64 0x55AE # <CJK> +0x9A65 0x557C # <CJK> +0x9A66 0x5583 # <CJK> +0x9A67 0x55A9 # <CJK> +0x9A68 0x5587 # <CJK> +0x9A69 0x55A8 # <CJK> +0x9A6A 0x55DA # <CJK> +0x9A6B 0x55C5 # <CJK> +0x9A6C 0x55DF # <CJK> +0x9A6D 0x55C4 # <CJK> +0x9A6E 0x55DC # <CJK> +0x9A6F 0x55E4 # <CJK> +0x9A70 0x55D4 # <CJK> +0x9A71 0x5614 # <CJK> +0x9A72 0x55F7 # <CJK> +0x9A73 0x5616 # <CJK> +0x9A74 0x55FE # <CJK> +0x9A75 0x55FD # <CJK> +0x9A76 0x561B # <CJK> +0x9A77 0x55F9 # <CJK> +0x9A78 0x564E # <CJK> +0x9A79 0x5650 # <CJK> +0x9A7A 0x71DF # <CJK> +0x9A7B 0x5634 # <CJK> +0x9A7C 0x5636 # <CJK> +0x9A7D 0x5632 # <CJK> +0x9A7E 0x5638 # <CJK> +0x9A80 0x566B # <CJK> +0x9A81 0x5664 # <CJK> +0x9A82 0x562F # <CJK> +0x9A83 0x566C # <CJK> +0x9A84 0x566A # <CJK> +0x9A85 0x5686 # <CJK> +0x9A86 0x5680 # <CJK> +0x9A87 0x568A # <CJK> +0x9A88 0x56A0 # <CJK> +0x9A89 0x5694 # <CJK> +0x9A8A 0x568F # <CJK> +0x9A8B 0x56A5 # <CJK> +0x9A8C 0x56AE # <CJK> +0x9A8D 0x56B6 # <CJK> +0x9A8E 0x56B4 # <CJK> +0x9A8F 0x56C2 # <CJK> +0x9A90 0x56BC # <CJK> +0x9A91 0x56C1 # <CJK> +0x9A92 0x56C3 # <CJK> +0x9A93 0x56C0 # <CJK> +0x9A94 0x56C8 # <CJK> +0x9A95 0x56CE # <CJK> +0x9A96 0x56D1 # <CJK> +0x9A97 0x56D3 # <CJK> +0x9A98 0x56D7 # <CJK> +0x9A99 0x56EE # <CJK> +0x9A9A 0x56F9 # <CJK> +0x9A9B 0x5700 # <CJK> +0x9A9C 0x56FF # <CJK> +0x9A9D 0x5704 # <CJK> +0x9A9E 0x5709 # <CJK> +0x9A9F 0x5708 # <CJK> +0x9AA0 0x570B # <CJK> +0x9AA1 0x570D # <CJK> +0x9AA2 0x5713 # <CJK> +0x9AA3 0x5718 # <CJK> +0x9AA4 0x5716 # <CJK> +0x9AA5 0x55C7 # <CJK> +0x9AA6 0x571C # <CJK> +0x9AA7 0x5726 # <CJK> +0x9AA8 0x5737 # <CJK> +0x9AA9 0x5738 # <CJK> +0x9AAA 0x574E # <CJK> +0x9AAB 0x573B # <CJK> +0x9AAC 0x5740 # <CJK> +0x9AAD 0x574F # <CJK> +0x9AAE 0x5769 # <CJK> +0x9AAF 0x57C0 # <CJK> +0x9AB0 0x5788 # <CJK> +0x9AB1 0x5761 # <CJK> +0x9AB2 0x577F # <CJK> +0x9AB3 0x5789 # <CJK> +0x9AB4 0x5793 # <CJK> +0x9AB5 0x57A0 # <CJK> +0x9AB6 0x57B3 # <CJK> +0x9AB7 0x57A4 # <CJK> +0x9AB8 0x57AA # <CJK> +0x9AB9 0x57B0 # <CJK> +0x9ABA 0x57C3 # <CJK> +0x9ABB 0x57C6 # <CJK> +0x9ABC 0x57D4 # <CJK> +0x9ABD 0x57D2 # <CJK> +0x9ABE 0x57D3 # <CJK> +0x9ABF 0x580A # <CJK> +0x9AC0 0x57D6 # <CJK> +0x9AC1 0x57E3 # <CJK> +0x9AC2 0x580B # <CJK> +0x9AC3 0x5819 # <CJK> +0x9AC4 0x581D # <CJK> +0x9AC5 0x5872 # <CJK> +0x9AC6 0x5821 # <CJK> +0x9AC7 0x5862 # <CJK> +0x9AC8 0x584B # <CJK> +0x9AC9 0x5870 # <CJK> +0x9ACA 0x6BC0 # <CJK> +0x9ACB 0x5852 # <CJK> +0x9ACC 0x583D # <CJK> +0x9ACD 0x5879 # <CJK> +0x9ACE 0x5885 # <CJK> +0x9ACF 0x58B9 # <CJK> +0x9AD0 0x589F # <CJK> +0x9AD1 0x58AB # <CJK> +0x9AD2 0x58BA # <CJK> +0x9AD3 0x58DE # <CJK> +0x9AD4 0x58BB # <CJK> +0x9AD5 0x58B8 # <CJK> +0x9AD6 0x58AE # <CJK> +0x9AD7 0x58C5 # <CJK> +0x9AD8 0x58D3 # <CJK> +0x9AD9 0x58D1 # <CJK> +0x9ADA 0x58D7 # <CJK> +0x9ADB 0x58D9 # <CJK> +0x9ADC 0x58D8 # <CJK> +0x9ADD 0x58E5 # <CJK> +0x9ADE 0x58DC # <CJK> +0x9ADF 0x58E4 # <CJK> +0x9AE0 0x58DF # <CJK> +0x9AE1 0x58EF # <CJK> +0x9AE2 0x58FA # <CJK> +0x9AE3 0x58F9 # <CJK> +0x9AE4 0x58FB # <CJK> +0x9AE5 0x58FC # <CJK> +0x9AE6 0x58FD # <CJK> +0x9AE7 0x5902 # <CJK> +0x9AE8 0x590A # <CJK> +0x9AE9 0x5910 # <CJK> +0x9AEA 0x591B # <CJK> +0x9AEB 0x68A6 # <CJK> +0x9AEC 0x5925 # <CJK> +0x9AED 0x592C # <CJK> +0x9AEE 0x592D # <CJK> +0x9AEF 0x5932 # <CJK> +0x9AF0 0x5938 # <CJK> +0x9AF1 0x593E # <CJK> +0x9AF2 0x7AD2 # <CJK> +0x9AF3 0x5955 # <CJK> +0x9AF4 0x5950 # <CJK> +0x9AF5 0x594E # <CJK> +0x9AF6 0x595A # <CJK> +0x9AF7 0x5958 # <CJK> +0x9AF8 0x5962 # <CJK> +0x9AF9 0x5960 # <CJK> +0x9AFA 0x5967 # <CJK> +0x9AFB 0x596C # <CJK> +0x9AFC 0x5969 # <CJK> +0x9B40 0x5978 # <CJK> +0x9B41 0x5981 # <CJK> +0x9B42 0x599D # <CJK> +0x9B43 0x4F5E # <CJK> +0x9B44 0x4FAB # <CJK> +0x9B45 0x59A3 # <CJK> +0x9B46 0x59B2 # <CJK> +0x9B47 0x59C6 # <CJK> +0x9B48 0x59E8 # <CJK> +0x9B49 0x59DC # <CJK> +0x9B4A 0x598D # <CJK> +0x9B4B 0x59D9 # <CJK> +0x9B4C 0x59DA # <CJK> +0x9B4D 0x5A25 # <CJK> +0x9B4E 0x5A1F # <CJK> +0x9B4F 0x5A11 # <CJK> +0x9B50 0x5A1C # <CJK> +0x9B51 0x5A09 # <CJK> +0x9B52 0x5A1A # <CJK> +0x9B53 0x5A40 # <CJK> +0x9B54 0x5A6C # <CJK> +0x9B55 0x5A49 # <CJK> +0x9B56 0x5A35 # <CJK> +0x9B57 0x5A36 # <CJK> +0x9B58 0x5A62 # <CJK> +0x9B59 0x5A6A # <CJK> +0x9B5A 0x5A9A # <CJK> +0x9B5B 0x5ABC # <CJK> +0x9B5C 0x5ABE # <CJK> +0x9B5D 0x5ACB # <CJK> +0x9B5E 0x5AC2 # <CJK> +0x9B5F 0x5ABD # <CJK> +0x9B60 0x5AE3 # <CJK> +0x9B61 0x5AD7 # <CJK> +0x9B62 0x5AE6 # <CJK> +0x9B63 0x5AE9 # <CJK> +0x9B64 0x5AD6 # <CJK> +0x9B65 0x5AFA # <CJK> +0x9B66 0x5AFB # <CJK> +0x9B67 0x5B0C # <CJK> +0x9B68 0x5B0B # <CJK> +0x9B69 0x5B16 # <CJK> +0x9B6A 0x5B32 # <CJK> +0x9B6B 0x5AD0 # <CJK> +0x9B6C 0x5B2A # <CJK> +0x9B6D 0x5B36 # <CJK> +0x9B6E 0x5B3E # <CJK> +0x9B6F 0x5B43 # <CJK> +0x9B70 0x5B45 # <CJK> +0x9B71 0x5B40 # <CJK> +0x9B72 0x5B51 # <CJK> +0x9B73 0x5B55 # <CJK> +0x9B74 0x5B5A # <CJK> +0x9B75 0x5B5B # <CJK> +0x9B76 0x5B65 # <CJK> +0x9B77 0x5B69 # <CJK> +0x9B78 0x5B70 # <CJK> +0x9B79 0x5B73 # <CJK> +0x9B7A 0x5B75 # <CJK> +0x9B7B 0x5B78 # <CJK> +0x9B7C 0x6588 # <CJK> +0x9B7D 0x5B7A # <CJK> +0x9B7E 0x5B80 # <CJK> +0x9B80 0x5B83 # <CJK> +0x9B81 0x5BA6 # <CJK> +0x9B82 0x5BB8 # <CJK> +0x9B83 0x5BC3 # <CJK> +0x9B84 0x5BC7 # <CJK> +0x9B85 0x5BC9 # <CJK> +0x9B86 0x5BD4 # <CJK> +0x9B87 0x5BD0 # <CJK> +0x9B88 0x5BE4 # <CJK> +0x9B89 0x5BE6 # <CJK> +0x9B8A 0x5BE2 # <CJK> +0x9B8B 0x5BDE # <CJK> +0x9B8C 0x5BE5 # <CJK> +0x9B8D 0x5BEB # <CJK> +0x9B8E 0x5BF0 # <CJK> +0x9B8F 0x5BF6 # <CJK> +0x9B90 0x5BF3 # <CJK> +0x9B91 0x5C05 # <CJK> +0x9B92 0x5C07 # <CJK> +0x9B93 0x5C08 # <CJK> +0x9B94 0x5C0D # <CJK> +0x9B95 0x5C13 # <CJK> +0x9B96 0x5C20 # <CJK> +0x9B97 0x5C22 # <CJK> +0x9B98 0x5C28 # <CJK> +0x9B99 0x5C38 # <CJK> +0x9B9A 0x5C39 # <CJK> +0x9B9B 0x5C41 # <CJK> +0x9B9C 0x5C46 # <CJK> +0x9B9D 0x5C4E # <CJK> +0x9B9E 0x5C53 # <CJK> +0x9B9F 0x5C50 # <CJK> +0x9BA0 0x5C4F # <CJK> +0x9BA1 0x5B71 # <CJK> +0x9BA2 0x5C6C # <CJK> +0x9BA3 0x5C6E # <CJK> +0x9BA4 0x4E62 # <CJK> +0x9BA5 0x5C76 # <CJK> +0x9BA6 0x5C79 # <CJK> +0x9BA7 0x5C8C # <CJK> +0x9BA8 0x5C91 # <CJK> +0x9BA9 0x5C94 # <CJK> +0x9BAA 0x599B # <CJK> +0x9BAB 0x5CAB # <CJK> +0x9BAC 0x5CBB # <CJK> +0x9BAD 0x5CB6 # <CJK> +0x9BAE 0x5CBC # <CJK> +0x9BAF 0x5CB7 # <CJK> +0x9BB0 0x5CC5 # <CJK> +0x9BB1 0x5CBE # <CJK> +0x9BB2 0x5CC7 # <CJK> +0x9BB3 0x5CD9 # <CJK> +0x9BB4 0x5CE9 # <CJK> +0x9BB5 0x5CFD # <CJK> +0x9BB6 0x5CFA # <CJK> +0x9BB7 0x5CED # <CJK> +0x9BB8 0x5D8C # <CJK> +0x9BB9 0x5CEA # <CJK> +0x9BBA 0x5D0B # <CJK> +0x9BBB 0x5D15 # <CJK> +0x9BBC 0x5D17 # <CJK> +0x9BBD 0x5D5C # <CJK> +0x9BBE 0x5D1F # <CJK> +0x9BBF 0x5D1B # <CJK> +0x9BC0 0x5D11 # <CJK> +0x9BC1 0x5D14 # <CJK> +0x9BC2 0x5D22 # <CJK> +0x9BC3 0x5D1A # <CJK> +0x9BC4 0x5D19 # <CJK> +0x9BC5 0x5D18 # <CJK> +0x9BC6 0x5D4C # <CJK> +0x9BC7 0x5D52 # <CJK> +0x9BC8 0x5D4E # <CJK> +0x9BC9 0x5D4B # <CJK> +0x9BCA 0x5D6C # <CJK> +0x9BCB 0x5D73 # <CJK> +0x9BCC 0x5D76 # <CJK> +0x9BCD 0x5D87 # <CJK> +0x9BCE 0x5D84 # <CJK> +0x9BCF 0x5D82 # <CJK> +0x9BD0 0x5DA2 # <CJK> +0x9BD1 0x5D9D # <CJK> +0x9BD2 0x5DAC # <CJK> +0x9BD3 0x5DAE # <CJK> +0x9BD4 0x5DBD # <CJK> +0x9BD5 0x5D90 # <CJK> +0x9BD6 0x5DB7 # <CJK> +0x9BD7 0x5DBC # <CJK> +0x9BD8 0x5DC9 # <CJK> +0x9BD9 0x5DCD # <CJK> +0x9BDA 0x5DD3 # <CJK> +0x9BDB 0x5DD2 # <CJK> +0x9BDC 0x5DD6 # <CJK> +0x9BDD 0x5DDB # <CJK> +0x9BDE 0x5DEB # <CJK> +0x9BDF 0x5DF2 # <CJK> +0x9BE0 0x5DF5 # <CJK> +0x9BE1 0x5E0B # <CJK> +0x9BE2 0x5E1A # <CJK> +0x9BE3 0x5E19 # <CJK> +0x9BE4 0x5E11 # <CJK> +0x9BE5 0x5E1B # <CJK> +0x9BE6 0x5E36 # <CJK> +0x9BE7 0x5E37 # <CJK> +0x9BE8 0x5E44 # <CJK> +0x9BE9 0x5E43 # <CJK> +0x9BEA 0x5E40 # <CJK> +0x9BEB 0x5E4E # <CJK> +0x9BEC 0x5E57 # <CJK> +0x9BED 0x5E54 # <CJK> +0x9BEE 0x5E5F # <CJK> +0x9BEF 0x5E62 # <CJK> +0x9BF0 0x5E64 # <CJK> +0x9BF1 0x5E47 # <CJK> +0x9BF2 0x5E75 # <CJK> +0x9BF3 0x5E76 # <CJK> +0x9BF4 0x5E7A # <CJK> +0x9BF5 0x9EBC # <CJK> +0x9BF6 0x5E7F # <CJK> +0x9BF7 0x5EA0 # <CJK> +0x9BF8 0x5EC1 # <CJK> +0x9BF9 0x5EC2 # <CJK> +0x9BFA 0x5EC8 # <CJK> +0x9BFB 0x5ED0 # <CJK> +0x9BFC 0x5ECF # <CJK> +0x9C40 0x5ED6 # <CJK> +0x9C41 0x5EE3 # <CJK> +0x9C42 0x5EDD # <CJK> +0x9C43 0x5EDA # <CJK> +0x9C44 0x5EDB # <CJK> +0x9C45 0x5EE2 # <CJK> +0x9C46 0x5EE1 # <CJK> +0x9C47 0x5EE8 # <CJK> +0x9C48 0x5EE9 # <CJK> +0x9C49 0x5EEC # <CJK> +0x9C4A 0x5EF1 # <CJK> +0x9C4B 0x5EF3 # <CJK> +0x9C4C 0x5EF0 # <CJK> +0x9C4D 0x5EF4 # <CJK> +0x9C4E 0x5EF8 # <CJK> +0x9C4F 0x5EFE # <CJK> +0x9C50 0x5F03 # <CJK> +0x9C51 0x5F09 # <CJK> +0x9C52 0x5F5D # <CJK> +0x9C53 0x5F5C # <CJK> +0x9C54 0x5F0B # <CJK> +0x9C55 0x5F11 # <CJK> +0x9C56 0x5F16 # <CJK> +0x9C57 0x5F29 # <CJK> +0x9C58 0x5F2D # <CJK> +0x9C59 0x5F38 # <CJK> +0x9C5A 0x5F41 # <CJK> +0x9C5B 0x5F48 # <CJK> +0x9C5C 0x5F4C # <CJK> +0x9C5D 0x5F4E # <CJK> +0x9C5E 0x5F2F # <CJK> +0x9C5F 0x5F51 # <CJK> +0x9C60 0x5F56 # <CJK> +0x9C61 0x5F57 # <CJK> +0x9C62 0x5F59 # <CJK> +0x9C63 0x5F61 # <CJK> +0x9C64 0x5F6D # <CJK> +0x9C65 0x5F73 # <CJK> +0x9C66 0x5F77 # <CJK> +0x9C67 0x5F83 # <CJK> +0x9C68 0x5F82 # <CJK> +0x9C69 0x5F7F # <CJK> +0x9C6A 0x5F8A # <CJK> +0x9C6B 0x5F88 # <CJK> +0x9C6C 0x5F91 # <CJK> +0x9C6D 0x5F87 # <CJK> +0x9C6E 0x5F9E # <CJK> +0x9C6F 0x5F99 # <CJK> +0x9C70 0x5F98 # <CJK> +0x9C71 0x5FA0 # <CJK> +0x9C72 0x5FA8 # <CJK> +0x9C73 0x5FAD # <CJK> +0x9C74 0x5FBC # <CJK> +0x9C75 0x5FD6 # <CJK> +0x9C76 0x5FFB # <CJK> +0x9C77 0x5FE4 # <CJK> +0x9C78 0x5FF8 # <CJK> +0x9C79 0x5FF1 # <CJK> +0x9C7A 0x5FDD # <CJK> +0x9C7B 0x60B3 # <CJK> +0x9C7C 0x5FFF # <CJK> +0x9C7D 0x6021 # <CJK> +0x9C7E 0x6060 # <CJK> +0x9C80 0x6019 # <CJK> +0x9C81 0x6010 # <CJK> +0x9C82 0x6029 # <CJK> +0x9C83 0x600E # <CJK> +0x9C84 0x6031 # <CJK> +0x9C85 0x601B # <CJK> +0x9C86 0x6015 # <CJK> +0x9C87 0x602B # <CJK> +0x9C88 0x6026 # <CJK> +0x9C89 0x600F # <CJK> +0x9C8A 0x603A # <CJK> +0x9C8B 0x605A # <CJK> +0x9C8C 0x6041 # <CJK> +0x9C8D 0x606A # <CJK> +0x9C8E 0x6077 # <CJK> +0x9C8F 0x605F # <CJK> +0x9C90 0x604A # <CJK> +0x9C91 0x6046 # <CJK> +0x9C92 0x604D # <CJK> +0x9C93 0x6063 # <CJK> +0x9C94 0x6043 # <CJK> +0x9C95 0x6064 # <CJK> +0x9C96 0x6042 # <CJK> +0x9C97 0x606C # <CJK> +0x9C98 0x606B # <CJK> +0x9C99 0x6059 # <CJK> +0x9C9A 0x6081 # <CJK> +0x9C9B 0x608D # <CJK> +0x9C9C 0x60E7 # <CJK> +0x9C9D 0x6083 # <CJK> +0x9C9E 0x609A # <CJK> +0x9C9F 0x6084 # <CJK> +0x9CA0 0x609B # <CJK> +0x9CA1 0x6096 # <CJK> +0x9CA2 0x6097 # <CJK> +0x9CA3 0x6092 # <CJK> +0x9CA4 0x60A7 # <CJK> +0x9CA5 0x608B # <CJK> +0x9CA6 0x60E1 # <CJK> +0x9CA7 0x60B8 # <CJK> +0x9CA8 0x60E0 # <CJK> +0x9CA9 0x60D3 # <CJK> +0x9CAA 0x60B4 # <CJK> +0x9CAB 0x5FF0 # <CJK> +0x9CAC 0x60BD # <CJK> +0x9CAD 0x60C6 # <CJK> +0x9CAE 0x60B5 # <CJK> +0x9CAF 0x60D8 # <CJK> +0x9CB0 0x614D # <CJK> +0x9CB1 0x6115 # <CJK> +0x9CB2 0x6106 # <CJK> +0x9CB3 0x60F6 # <CJK> +0x9CB4 0x60F7 # <CJK> +0x9CB5 0x6100 # <CJK> +0x9CB6 0x60F4 # <CJK> +0x9CB7 0x60FA # <CJK> +0x9CB8 0x6103 # <CJK> +0x9CB9 0x6121 # <CJK> +0x9CBA 0x60FB # <CJK> +0x9CBB 0x60F1 # <CJK> +0x9CBC 0x610D # <CJK> +0x9CBD 0x610E # <CJK> +0x9CBE 0x6147 # <CJK> +0x9CBF 0x613E # <CJK> +0x9CC0 0x6128 # <CJK> +0x9CC1 0x6127 # <CJK> +0x9CC2 0x614A # <CJK> +0x9CC3 0x613F # <CJK> +0x9CC4 0x613C # <CJK> +0x9CC5 0x612C # <CJK> +0x9CC6 0x6134 # <CJK> +0x9CC7 0x613D # <CJK> +0x9CC8 0x6142 # <CJK> +0x9CC9 0x6144 # <CJK> +0x9CCA 0x6173 # <CJK> +0x9CCB 0x6177 # <CJK> +0x9CCC 0x6158 # <CJK> +0x9CCD 0x6159 # <CJK> +0x9CCE 0x615A # <CJK> +0x9CCF 0x616B # <CJK> +0x9CD0 0x6174 # <CJK> +0x9CD1 0x616F # <CJK> +0x9CD2 0x6165 # <CJK> +0x9CD3 0x6171 # <CJK> +0x9CD4 0x615F # <CJK> +0x9CD5 0x615D # <CJK> +0x9CD6 0x6153 # <CJK> +0x9CD7 0x6175 # <CJK> +0x9CD8 0x6199 # <CJK> +0x9CD9 0x6196 # <CJK> +0x9CDA 0x6187 # <CJK> +0x9CDB 0x61AC # <CJK> +0x9CDC 0x6194 # <CJK> +0x9CDD 0x619A # <CJK> +0x9CDE 0x618A # <CJK> +0x9CDF 0x6191 # <CJK> +0x9CE0 0x61AB # <CJK> +0x9CE1 0x61AE # <CJK> +0x9CE2 0x61CC # <CJK> +0x9CE3 0x61CA # <CJK> +0x9CE4 0x61C9 # <CJK> +0x9CE5 0x61F7 # <CJK> +0x9CE6 0x61C8 # <CJK> +0x9CE7 0x61C3 # <CJK> +0x9CE8 0x61C6 # <CJK> +0x9CE9 0x61BA # <CJK> +0x9CEA 0x61CB # <CJK> +0x9CEB 0x7F79 # <CJK> +0x9CEC 0x61CD # <CJK> +0x9CED 0x61E6 # <CJK> +0x9CEE 0x61E3 # <CJK> +0x9CEF 0x61F6 # <CJK> +0x9CF0 0x61FA # <CJK> +0x9CF1 0x61F4 # <CJK> +0x9CF2 0x61FF # <CJK> +0x9CF3 0x61FD # <CJK> +0x9CF4 0x61FC # <CJK> +0x9CF5 0x61FE # <CJK> +0x9CF6 0x6200 # <CJK> +0x9CF7 0x6208 # <CJK> +0x9CF8 0x6209 # <CJK> +0x9CF9 0x620D # <CJK> +0x9CFA 0x620C # <CJK> +0x9CFB 0x6214 # <CJK> +0x9CFC 0x621B # <CJK> +0x9D40 0x621E # <CJK> +0x9D41 0x6221 # <CJK> +0x9D42 0x622A # <CJK> +0x9D43 0x622E # <CJK> +0x9D44 0x6230 # <CJK> +0x9D45 0x6232 # <CJK> +0x9D46 0x6233 # <CJK> +0x9D47 0x6241 # <CJK> +0x9D48 0x624E # <CJK> +0x9D49 0x625E # <CJK> +0x9D4A 0x6263 # <CJK> +0x9D4B 0x625B # <CJK> +0x9D4C 0x6260 # <CJK> +0x9D4D 0x6268 # <CJK> +0x9D4E 0x627C # <CJK> +0x9D4F 0x6282 # <CJK> +0x9D50 0x6289 # <CJK> +0x9D51 0x627E # <CJK> +0x9D52 0x6292 # <CJK> +0x9D53 0x6293 # <CJK> +0x9D54 0x6296 # <CJK> +0x9D55 0x62D4 # <CJK> +0x9D56 0x6283 # <CJK> +0x9D57 0x6294 # <CJK> +0x9D58 0x62D7 # <CJK> +0x9D59 0x62D1 # <CJK> +0x9D5A 0x62BB # <CJK> +0x9D5B 0x62CF # <CJK> +0x9D5C 0x62FF # <CJK> +0x9D5D 0x62C6 # <CJK> +0x9D5E 0x64D4 # <CJK> +0x9D5F 0x62C8 # <CJK> +0x9D60 0x62DC # <CJK> +0x9D61 0x62CC # <CJK> +0x9D62 0x62CA # <CJK> +0x9D63 0x62C2 # <CJK> +0x9D64 0x62C7 # <CJK> +0x9D65 0x629B # <CJK> +0x9D66 0x62C9 # <CJK> +0x9D67 0x630C # <CJK> +0x9D68 0x62EE # <CJK> +0x9D69 0x62F1 # <CJK> +0x9D6A 0x6327 # <CJK> +0x9D6B 0x6302 # <CJK> +0x9D6C 0x6308 # <CJK> +0x9D6D 0x62EF # <CJK> +0x9D6E 0x62F5 # <CJK> +0x9D6F 0x6350 # <CJK> +0x9D70 0x633E # <CJK> +0x9D71 0x634D # <CJK> +0x9D72 0x641C # <CJK> +0x9D73 0x634F # <CJK> +0x9D74 0x6396 # <CJK> +0x9D75 0x638E # <CJK> +0x9D76 0x6380 # <CJK> +0x9D77 0x63AB # <CJK> +0x9D78 0x6376 # <CJK> +0x9D79 0x63A3 # <CJK> +0x9D7A 0x638F # <CJK> +0x9D7B 0x6389 # <CJK> +0x9D7C 0x639F # <CJK> +0x9D7D 0x63B5 # <CJK> +0x9D7E 0x636B # <CJK> +0x9D80 0x6369 # <CJK> +0x9D81 0x63BE # <CJK> +0x9D82 0x63E9 # <CJK> +0x9D83 0x63C0 # <CJK> +0x9D84 0x63C6 # <CJK> +0x9D85 0x63E3 # <CJK> +0x9D86 0x63C9 # <CJK> +0x9D87 0x63D2 # <CJK> +0x9D88 0x63F6 # <CJK> +0x9D89 0x63C4 # <CJK> +0x9D8A 0x6416 # <CJK> +0x9D8B 0x6434 # <CJK> +0x9D8C 0x6406 # <CJK> +0x9D8D 0x6413 # <CJK> +0x9D8E 0x6426 # <CJK> +0x9D8F 0x6436 # <CJK> +0x9D90 0x651D # <CJK> +0x9D91 0x6417 # <CJK> +0x9D92 0x6428 # <CJK> +0x9D93 0x640F # <CJK> +0x9D94 0x6467 # <CJK> +0x9D95 0x646F # <CJK> +0x9D96 0x6476 # <CJK> +0x9D97 0x644E # <CJK> +0x9D98 0x652A # <CJK> +0x9D99 0x6495 # <CJK> +0x9D9A 0x6493 # <CJK> +0x9D9B 0x64A5 # <CJK> +0x9D9C 0x64A9 # <CJK> +0x9D9D 0x6488 # <CJK> +0x9D9E 0x64BC # <CJK> +0x9D9F 0x64DA # <CJK> +0x9DA0 0x64D2 # <CJK> +0x9DA1 0x64C5 # <CJK> +0x9DA2 0x64C7 # <CJK> +0x9DA3 0x64BB # <CJK> +0x9DA4 0x64D8 # <CJK> +0x9DA5 0x64C2 # <CJK> +0x9DA6 0x64F1 # <CJK> +0x9DA7 0x64E7 # <CJK> +0x9DA8 0x8209 # <CJK> +0x9DA9 0x64E0 # <CJK> +0x9DAA 0x64E1 # <CJK> +0x9DAB 0x62AC # <CJK> +0x9DAC 0x64E3 # <CJK> +0x9DAD 0x64EF # <CJK> +0x9DAE 0x652C # <CJK> +0x9DAF 0x64F6 # <CJK> +0x9DB0 0x64F4 # <CJK> +0x9DB1 0x64F2 # <CJK> +0x9DB2 0x64FA # <CJK> +0x9DB3 0x6500 # <CJK> +0x9DB4 0x64FD # <CJK> +0x9DB5 0x6518 # <CJK> +0x9DB6 0x651C # <CJK> +0x9DB7 0x6505 # <CJK> +0x9DB8 0x6524 # <CJK> +0x9DB9 0x6523 # <CJK> +0x9DBA 0x652B # <CJK> +0x9DBB 0x6534 # <CJK> +0x9DBC 0x6535 # <CJK> +0x9DBD 0x6537 # <CJK> +0x9DBE 0x6536 # <CJK> +0x9DBF 0x6538 # <CJK> +0x9DC0 0x754B # <CJK> +0x9DC1 0x6548 # <CJK> +0x9DC2 0x6556 # <CJK> +0x9DC3 0x6555 # <CJK> +0x9DC4 0x654D # <CJK> +0x9DC5 0x6558 # <CJK> +0x9DC6 0x655E # <CJK> +0x9DC7 0x655D # <CJK> +0x9DC8 0x6572 # <CJK> +0x9DC9 0x6578 # <CJK> +0x9DCA 0x6582 # <CJK> +0x9DCB 0x6583 # <CJK> +0x9DCC 0x8B8A # <CJK> +0x9DCD 0x659B # <CJK> +0x9DCE 0x659F # <CJK> +0x9DCF 0x65AB # <CJK> +0x9DD0 0x65B7 # <CJK> +0x9DD1 0x65C3 # <CJK> +0x9DD2 0x65C6 # <CJK> +0x9DD3 0x65C1 # <CJK> +0x9DD4 0x65C4 # <CJK> +0x9DD5 0x65CC # <CJK> +0x9DD6 0x65D2 # <CJK> +0x9DD7 0x65DB # <CJK> +0x9DD8 0x65D9 # <CJK> +0x9DD9 0x65E0 # <CJK> +0x9DDA 0x65E1 # <CJK> +0x9DDB 0x65F1 # <CJK> +0x9DDC 0x6772 # <CJK> +0x9DDD 0x660A # <CJK> +0x9DDE 0x6603 # <CJK> +0x9DDF 0x65FB # <CJK> +0x9DE0 0x6773 # <CJK> +0x9DE1 0x6635 # <CJK> +0x9DE2 0x6636 # <CJK> +0x9DE3 0x6634 # <CJK> +0x9DE4 0x661C # <CJK> +0x9DE5 0x664F # <CJK> +0x9DE6 0x6644 # <CJK> +0x9DE7 0x6649 # <CJK> +0x9DE8 0x6641 # <CJK> +0x9DE9 0x665E # <CJK> +0x9DEA 0x665D # <CJK> +0x9DEB 0x6664 # <CJK> +0x9DEC 0x6667 # <CJK> +0x9DED 0x6668 # <CJK> +0x9DEE 0x665F # <CJK> +0x9DEF 0x6662 # <CJK> +0x9DF0 0x6670 # <CJK> +0x9DF1 0x6683 # <CJK> +0x9DF2 0x6688 # <CJK> +0x9DF3 0x668E # <CJK> +0x9DF4 0x6689 # <CJK> +0x9DF5 0x6684 # <CJK> +0x9DF6 0x6698 # <CJK> +0x9DF7 0x669D # <CJK> +0x9DF8 0x66C1 # <CJK> +0x9DF9 0x66B9 # <CJK> +0x9DFA 0x66C9 # <CJK> +0x9DFB 0x66BE # <CJK> +0x9DFC 0x66BC # <CJK> +0x9E40 0x66C4 # <CJK> +0x9E41 0x66B8 # <CJK> +0x9E42 0x66D6 # <CJK> +0x9E43 0x66DA # <CJK> +0x9E44 0x66E0 # <CJK> +0x9E45 0x663F # <CJK> +0x9E46 0x66E6 # <CJK> +0x9E47 0x66E9 # <CJK> +0x9E48 0x66F0 # <CJK> +0x9E49 0x66F5 # <CJK> +0x9E4A 0x66F7 # <CJK> +0x9E4B 0x670F # <CJK> +0x9E4C 0x6716 # <CJK> +0x9E4D 0x671E # <CJK> +0x9E4E 0x6726 # <CJK> +0x9E4F 0x6727 # <CJK> +0x9E50 0x9738 # <CJK> +0x9E51 0x672E # <CJK> +0x9E52 0x673F # <CJK> +0x9E53 0x6736 # <CJK> +0x9E54 0x6741 # <CJK> +0x9E55 0x6738 # <CJK> +0x9E56 0x6737 # <CJK> +0x9E57 0x6746 # <CJK> +0x9E58 0x675E # <CJK> +0x9E59 0x6760 # <CJK> +0x9E5A 0x6759 # <CJK> +0x9E5B 0x6763 # <CJK> +0x9E5C 0x6764 # <CJK> +0x9E5D 0x6789 # <CJK> +0x9E5E 0x6770 # <CJK> +0x9E5F 0x67A9 # <CJK> +0x9E60 0x677C # <CJK> +0x9E61 0x676A # <CJK> +0x9E62 0x678C # <CJK> +0x9E63 0x678B # <CJK> +0x9E64 0x67A6 # <CJK> +0x9E65 0x67A1 # <CJK> +0x9E66 0x6785 # <CJK> +0x9E67 0x67B7 # <CJK> +0x9E68 0x67EF # <CJK> +0x9E69 0x67B4 # <CJK> +0x9E6A 0x67EC # <CJK> +0x9E6B 0x67B3 # <CJK> +0x9E6C 0x67E9 # <CJK> +0x9E6D 0x67B8 # <CJK> +0x9E6E 0x67E4 # <CJK> +0x9E6F 0x67DE # <CJK> +0x9E70 0x67DD # <CJK> +0x9E71 0x67E2 # <CJK> +0x9E72 0x67EE # <CJK> +0x9E73 0x67B9 # <CJK> +0x9E74 0x67CE # <CJK> +0x9E75 0x67C6 # <CJK> +0x9E76 0x67E7 # <CJK> +0x9E77 0x6A9C # <CJK> +0x9E78 0x681E # <CJK> +0x9E79 0x6846 # <CJK> +0x9E7A 0x6829 # <CJK> +0x9E7B 0x6840 # <CJK> +0x9E7C 0x684D # <CJK> +0x9E7D 0x6832 # <CJK> +0x9E7E 0x684E # <CJK> +0x9E80 0x68B3 # <CJK> +0x9E81 0x682B # <CJK> +0x9E82 0x6859 # <CJK> +0x9E83 0x6863 # <CJK> +0x9E84 0x6877 # <CJK> +0x9E85 0x687F # <CJK> +0x9E86 0x689F # <CJK> +0x9E87 0x688F # <CJK> +0x9E88 0x68AD # <CJK> +0x9E89 0x6894 # <CJK> +0x9E8A 0x689D # <CJK> +0x9E8B 0x689B # <CJK> +0x9E8C 0x6883 # <CJK> +0x9E8D 0x6AAE # <CJK> +0x9E8E 0x68B9 # <CJK> +0x9E8F 0x6874 # <CJK> +0x9E90 0x68B5 # <CJK> +0x9E91 0x68A0 # <CJK> +0x9E92 0x68BA # <CJK> +0x9E93 0x690F # <CJK> +0x9E94 0x688D # <CJK> +0x9E95 0x687E # <CJK> +0x9E96 0x6901 # <CJK> +0x9E97 0x68CA # <CJK> +0x9E98 0x6908 # <CJK> +0x9E99 0x68D8 # <CJK> +0x9E9A 0x6922 # <CJK> +0x9E9B 0x6926 # <CJK> +0x9E9C 0x68E1 # <CJK> +0x9E9D 0x690C # <CJK> +0x9E9E 0x68CD # <CJK> +0x9E9F 0x68D4 # <CJK> +0x9EA0 0x68E7 # <CJK> +0x9EA1 0x68D5 # <CJK> +0x9EA2 0x6936 # <CJK> +0x9EA3 0x6912 # <CJK> +0x9EA4 0x6904 # <CJK> +0x9EA5 0x68D7 # <CJK> +0x9EA6 0x68E3 # <CJK> +0x9EA7 0x6925 # <CJK> +0x9EA8 0x68F9 # <CJK> +0x9EA9 0x68E0 # <CJK> +0x9EAA 0x68EF # <CJK> +0x9EAB 0x6928 # <CJK> +0x9EAC 0x692A # <CJK> +0x9EAD 0x691A # <CJK> +0x9EAE 0x6923 # <CJK> +0x9EAF 0x6921 # <CJK> +0x9EB0 0x68C6 # <CJK> +0x9EB1 0x6979 # <CJK> +0x9EB2 0x6977 # <CJK> +0x9EB3 0x695C # <CJK> +0x9EB4 0x6978 # <CJK> +0x9EB5 0x696B # <CJK> +0x9EB6 0x6954 # <CJK> +0x9EB7 0x697E # <CJK> +0x9EB8 0x696E # <CJK> +0x9EB9 0x6939 # <CJK> +0x9EBA 0x6974 # <CJK> +0x9EBB 0x693D # <CJK> +0x9EBC 0x6959 # <CJK> +0x9EBD 0x6930 # <CJK> +0x9EBE 0x6961 # <CJK> +0x9EBF 0x695E # <CJK> +0x9EC0 0x695D # <CJK> +0x9EC1 0x6981 # <CJK> +0x9EC2 0x696A # <CJK> +0x9EC3 0x69B2 # <CJK> +0x9EC4 0x69AE # <CJK> +0x9EC5 0x69D0 # <CJK> +0x9EC6 0x69BF # <CJK> +0x9EC7 0x69C1 # <CJK> +0x9EC8 0x69D3 # <CJK> +0x9EC9 0x69BE # <CJK> +0x9ECA 0x69CE # <CJK> +0x9ECB 0x5BE8 # <CJK> +0x9ECC 0x69CA # <CJK> +0x9ECD 0x69DD # <CJK> +0x9ECE 0x69BB # <CJK> +0x9ECF 0x69C3 # <CJK> +0x9ED0 0x69A7 # <CJK> +0x9ED1 0x6A2E # <CJK> +0x9ED2 0x6991 # <CJK> +0x9ED3 0x69A0 # <CJK> +0x9ED4 0x699C # <CJK> +0x9ED5 0x6995 # <CJK> +0x9ED6 0x69B4 # <CJK> +0x9ED7 0x69DE # <CJK> +0x9ED8 0x69E8 # <CJK> +0x9ED9 0x6A02 # <CJK> +0x9EDA 0x6A1B # <CJK> +0x9EDB 0x69FF # <CJK> +0x9EDC 0x6B0A # <CJK> +0x9EDD 0x69F9 # <CJK> +0x9EDE 0x69F2 # <CJK> +0x9EDF 0x69E7 # <CJK> +0x9EE0 0x6A05 # <CJK> +0x9EE1 0x69B1 # <CJK> +0x9EE2 0x6A1E # <CJK> +0x9EE3 0x69ED # <CJK> +0x9EE4 0x6A14 # <CJK> +0x9EE5 0x69EB # <CJK> +0x9EE6 0x6A0A # <CJK> +0x9EE7 0x6A12 # <CJK> +0x9EE8 0x6AC1 # <CJK> +0x9EE9 0x6A23 # <CJK> +0x9EEA 0x6A13 # <CJK> +0x9EEB 0x6A44 # <CJK> +0x9EEC 0x6A0C # <CJK> +0x9EED 0x6A72 # <CJK> +0x9EEE 0x6A36 # <CJK> +0x9EEF 0x6A78 # <CJK> +0x9EF0 0x6A47 # <CJK> +0x9EF1 0x6A62 # <CJK> +0x9EF2 0x6A59 # <CJK> +0x9EF3 0x6A66 # <CJK> +0x9EF4 0x6A48 # <CJK> +0x9EF5 0x6A38 # <CJK> +0x9EF6 0x6A22 # <CJK> +0x9EF7 0x6A90 # <CJK> +0x9EF8 0x6A8D # <CJK> +0x9EF9 0x6AA0 # <CJK> +0x9EFA 0x6A84 # <CJK> +0x9EFB 0x6AA2 # <CJK> +0x9EFC 0x6AA3 # <CJK> +0x9F40 0x6A97 # <CJK> +0x9F41 0x8617 # <CJK> +0x9F42 0x6ABB # <CJK> +0x9F43 0x6AC3 # <CJK> +0x9F44 0x6AC2 # <CJK> +0x9F45 0x6AB8 # <CJK> +0x9F46 0x6AB3 # <CJK> +0x9F47 0x6AAC # <CJK> +0x9F48 0x6ADE # <CJK> +0x9F49 0x6AD1 # <CJK> +0x9F4A 0x6ADF # <CJK> +0x9F4B 0x6AAA # <CJK> +0x9F4C 0x6ADA # <CJK> +0x9F4D 0x6AEA # <CJK> +0x9F4E 0x6AFB # <CJK> +0x9F4F 0x6B05 # <CJK> +0x9F50 0x8616 # <CJK> +0x9F51 0x6AFA # <CJK> +0x9F52 0x6B12 # <CJK> +0x9F53 0x6B16 # <CJK> +0x9F54 0x9B31 # <CJK> +0x9F55 0x6B1F # <CJK> +0x9F56 0x6B38 # <CJK> +0x9F57 0x6B37 # <CJK> +0x9F58 0x76DC # <CJK> +0x9F59 0x6B39 # <CJK> +0x9F5A 0x98EE # <CJK> +0x9F5B 0x6B47 # <CJK> +0x9F5C 0x6B43 # <CJK> +0x9F5D 0x6B49 # <CJK> +0x9F5E 0x6B50 # <CJK> +0x9F5F 0x6B59 # <CJK> +0x9F60 0x6B54 # <CJK> +0x9F61 0x6B5B # <CJK> +0x9F62 0x6B5F # <CJK> +0x9F63 0x6B61 # <CJK> +0x9F64 0x6B78 # <CJK> +0x9F65 0x6B79 # <CJK> +0x9F66 0x6B7F # <CJK> +0x9F67 0x6B80 # <CJK> +0x9F68 0x6B84 # <CJK> +0x9F69 0x6B83 # <CJK> +0x9F6A 0x6B8D # <CJK> +0x9F6B 0x6B98 # <CJK> +0x9F6C 0x6B95 # <CJK> +0x9F6D 0x6B9E # <CJK> +0x9F6E 0x6BA4 # <CJK> +0x9F6F 0x6BAA # <CJK> +0x9F70 0x6BAB # <CJK> +0x9F71 0x6BAF # <CJK> +0x9F72 0x6BB2 # <CJK> +0x9F73 0x6BB1 # <CJK> +0x9F74 0x6BB3 # <CJK> +0x9F75 0x6BB7 # <CJK> +0x9F76 0x6BBC # <CJK> +0x9F77 0x6BC6 # <CJK> +0x9F78 0x6BCB # <CJK> +0x9F79 0x6BD3 # <CJK> +0x9F7A 0x6BDF # <CJK> +0x9F7B 0x6BEC # <CJK> +0x9F7C 0x6BEB # <CJK> +0x9F7D 0x6BF3 # <CJK> +0x9F7E 0x6BEF # <CJK> +0x9F80 0x9EBE # <CJK> +0x9F81 0x6C08 # <CJK> +0x9F82 0x6C13 # <CJK> +0x9F83 0x6C14 # <CJK> +0x9F84 0x6C1B # <CJK> +0x9F85 0x6C24 # <CJK> +0x9F86 0x6C23 # <CJK> +0x9F87 0x6C5E # <CJK> +0x9F88 0x6C55 # <CJK> +0x9F89 0x6C62 # <CJK> +0x9F8A 0x6C6A # <CJK> +0x9F8B 0x6C82 # <CJK> +0x9F8C 0x6C8D # <CJK> +0x9F8D 0x6C9A # <CJK> +0x9F8E 0x6C81 # <CJK> +0x9F8F 0x6C9B # <CJK> +0x9F90 0x6C7E # <CJK> +0x9F91 0x6C68 # <CJK> +0x9F92 0x6C73 # <CJK> +0x9F93 0x6C92 # <CJK> +0x9F94 0x6C90 # <CJK> +0x9F95 0x6CC4 # <CJK> +0x9F96 0x6CF1 # <CJK> +0x9F97 0x6CD3 # <CJK> +0x9F98 0x6CBD # <CJK> +0x9F99 0x6CD7 # <CJK> +0x9F9A 0x6CC5 # <CJK> +0x9F9B 0x6CDD # <CJK> +0x9F9C 0x6CAE # <CJK> +0x9F9D 0x6CB1 # <CJK> +0x9F9E 0x6CBE # <CJK> +0x9F9F 0x6CBA # <CJK> +0x9FA0 0x6CDB # <CJK> +0x9FA1 0x6CEF # <CJK> +0x9FA2 0x6CD9 # <CJK> +0x9FA3 0x6CEA # <CJK> +0x9FA4 0x6D1F # <CJK> +0x9FA5 0x884D # <CJK> +0x9FA6 0x6D36 # <CJK> +0x9FA7 0x6D2B # <CJK> +0x9FA8 0x6D3D # <CJK> +0x9FA9 0x6D38 # <CJK> +0x9FAA 0x6D19 # <CJK> +0x9FAB 0x6D35 # <CJK> +0x9FAC 0x6D33 # <CJK> +0x9FAD 0x6D12 # <CJK> +0x9FAE 0x6D0C # <CJK> +0x9FAF 0x6D63 # <CJK> +0x9FB0 0x6D93 # <CJK> +0x9FB1 0x6D64 # <CJK> +0x9FB2 0x6D5A # <CJK> +0x9FB3 0x6D79 # <CJK> +0x9FB4 0x6D59 # <CJK> +0x9FB5 0x6D8E # <CJK> +0x9FB6 0x6D95 # <CJK> +0x9FB7 0x6FE4 # <CJK> +0x9FB8 0x6D85 # <CJK> +0x9FB9 0x6DF9 # <CJK> +0x9FBA 0x6E15 # <CJK> +0x9FBB 0x6E0A # <CJK> +0x9FBC 0x6DB5 # <CJK> +0x9FBD 0x6DC7 # <CJK> +0x9FBE 0x6DE6 # <CJK> +0x9FBF 0x6DB8 # <CJK> +0x9FC0 0x6DC6 # <CJK> +0x9FC1 0x6DEC # <CJK> +0x9FC2 0x6DDE # <CJK> +0x9FC3 0x6DCC # <CJK> +0x9FC4 0x6DE8 # <CJK> +0x9FC5 0x6DD2 # <CJK> +0x9FC6 0x6DC5 # <CJK> +0x9FC7 0x6DFA # <CJK> +0x9FC8 0x6DD9 # <CJK> +0x9FC9 0x6DE4 # <CJK> +0x9FCA 0x6DD5 # <CJK> +0x9FCB 0x6DEA # <CJK> +0x9FCC 0x6DEE # <CJK> +0x9FCD 0x6E2D # <CJK> +0x9FCE 0x6E6E # <CJK> +0x9FCF 0x6E2E # <CJK> +0x9FD0 0x6E19 # <CJK> +0x9FD1 0x6E72 # <CJK> +0x9FD2 0x6E5F # <CJK> +0x9FD3 0x6E3E # <CJK> +0x9FD4 0x6E23 # <CJK> +0x9FD5 0x6E6B # <CJK> +0x9FD6 0x6E2B # <CJK> +0x9FD7 0x6E76 # <CJK> +0x9FD8 0x6E4D # <CJK> +0x9FD9 0x6E1F # <CJK> +0x9FDA 0x6E43 # <CJK> +0x9FDB 0x6E3A # <CJK> +0x9FDC 0x6E4E # <CJK> +0x9FDD 0x6E24 # <CJK> +0x9FDE 0x6EFF # <CJK> +0x9FDF 0x6E1D # <CJK> +0x9FE0 0x6E38 # <CJK> +0x9FE1 0x6E82 # <CJK> +0x9FE2 0x6EAA # <CJK> +0x9FE3 0x6E98 # <CJK> +0x9FE4 0x6EC9 # <CJK> +0x9FE5 0x6EB7 # <CJK> +0x9FE6 0x6ED3 # <CJK> +0x9FE7 0x6EBD # <CJK> +0x9FE8 0x6EAF # <CJK> +0x9FE9 0x6EC4 # <CJK> +0x9FEA 0x6EB2 # <CJK> +0x9FEB 0x6ED4 # <CJK> +0x9FEC 0x6ED5 # <CJK> +0x9FED 0x6E8F # <CJK> +0x9FEE 0x6EA5 # <CJK> +0x9FEF 0x6EC2 # <CJK> +0x9FF0 0x6E9F # <CJK> +0x9FF1 0x6F41 # <CJK> +0x9FF2 0x6F11 # <CJK> +0x9FF3 0x704C # <CJK> +0x9FF4 0x6EEC # <CJK> +0x9FF5 0x6EF8 # <CJK> +0x9FF6 0x6EFE # <CJK> +0x9FF7 0x6F3F # <CJK> +0x9FF8 0x6EF2 # <CJK> +0x9FF9 0x6F31 # <CJK> +0x9FFA 0x6EEF # <CJK> +0x9FFB 0x6F32 # <CJK> +0x9FFC 0x6ECC # <CJK> +# +0xE040 0x6F3E # <CJK> +0xE041 0x6F13 # <CJK> +0xE042 0x6EF7 # <CJK> +0xE043 0x6F86 # <CJK> +0xE044 0x6F7A # <CJK> +0xE045 0x6F78 # <CJK> +0xE046 0x6F81 # <CJK> +0xE047 0x6F80 # <CJK> +0xE048 0x6F6F # <CJK> +0xE049 0x6F5B # <CJK> +0xE04A 0x6FF3 # <CJK> +0xE04B 0x6F6D # <CJK> +0xE04C 0x6F82 # <CJK> +0xE04D 0x6F7C # <CJK> +0xE04E 0x6F58 # <CJK> +0xE04F 0x6F8E # <CJK> +0xE050 0x6F91 # <CJK> +0xE051 0x6FC2 # <CJK> +0xE052 0x6F66 # <CJK> +0xE053 0x6FB3 # <CJK> +0xE054 0x6FA3 # <CJK> +0xE055 0x6FA1 # <CJK> +0xE056 0x6FA4 # <CJK> +0xE057 0x6FB9 # <CJK> +0xE058 0x6FC6 # <CJK> +0xE059 0x6FAA # <CJK> +0xE05A 0x6FDF # <CJK> +0xE05B 0x6FD5 # <CJK> +0xE05C 0x6FEC # <CJK> +0xE05D 0x6FD4 # <CJK> +0xE05E 0x6FD8 # <CJK> +0xE05F 0x6FF1 # <CJK> +0xE060 0x6FEE # <CJK> +0xE061 0x6FDB # <CJK> +0xE062 0x7009 # <CJK> +0xE063 0x700B # <CJK> +0xE064 0x6FFA # <CJK> +0xE065 0x7011 # <CJK> +0xE066 0x7001 # <CJK> +0xE067 0x700F # <CJK> +0xE068 0x6FFE # <CJK> +0xE069 0x701B # <CJK> +0xE06A 0x701A # <CJK> +0xE06B 0x6F74 # <CJK> +0xE06C 0x701D # <CJK> +0xE06D 0x7018 # <CJK> +0xE06E 0x701F # <CJK> +0xE06F 0x7030 # <CJK> +0xE070 0x703E # <CJK> +0xE071 0x7032 # <CJK> +0xE072 0x7051 # <CJK> +0xE073 0x7063 # <CJK> +0xE074 0x7099 # <CJK> +0xE075 0x7092 # <CJK> +0xE076 0x70AF # <CJK> +0xE077 0x70F1 # <CJK> +0xE078 0x70AC # <CJK> +0xE079 0x70B8 # <CJK> +0xE07A 0x70B3 # <CJK> +0xE07B 0x70AE # <CJK> +0xE07C 0x70DF # <CJK> +0xE07D 0x70CB # <CJK> +0xE07E 0x70DD # <CJK> +0xE080 0x70D9 # <CJK> +0xE081 0x7109 # <CJK> +0xE082 0x70FD # <CJK> +0xE083 0x711C # <CJK> +0xE084 0x7119 # <CJK> +0xE085 0x7165 # <CJK> +0xE086 0x7155 # <CJK> +0xE087 0x7188 # <CJK> +0xE088 0x7166 # <CJK> +0xE089 0x7162 # <CJK> +0xE08A 0x714C # <CJK> +0xE08B 0x7156 # <CJK> +0xE08C 0x716C # <CJK> +0xE08D 0x718F # <CJK> +0xE08E 0x71FB # <CJK> +0xE08F 0x7184 # <CJK> +0xE090 0x7195 # <CJK> +0xE091 0x71A8 # <CJK> +0xE092 0x71AC # <CJK> +0xE093 0x71D7 # <CJK> +0xE094 0x71B9 # <CJK> +0xE095 0x71BE # <CJK> +0xE096 0x71D2 # <CJK> +0xE097 0x71C9 # <CJK> +0xE098 0x71D4 # <CJK> +0xE099 0x71CE # <CJK> +0xE09A 0x71E0 # <CJK> +0xE09B 0x71EC # <CJK> +0xE09C 0x71E7 # <CJK> +0xE09D 0x71F5 # <CJK> +0xE09E 0x71FC # <CJK> +0xE09F 0x71F9 # <CJK> +0xE0A0 0x71FF # <CJK> +0xE0A1 0x720D # <CJK> +0xE0A2 0x7210 # <CJK> +0xE0A3 0x721B # <CJK> +0xE0A4 0x7228 # <CJK> +0xE0A5 0x722D # <CJK> +0xE0A6 0x722C # <CJK> +0xE0A7 0x7230 # <CJK> +0xE0A8 0x7232 # <CJK> +0xE0A9 0x723B # <CJK> +0xE0AA 0x723C # <CJK> +0xE0AB 0x723F # <CJK> +0xE0AC 0x7240 # <CJK> +0xE0AD 0x7246 # <CJK> +0xE0AE 0x724B # <CJK> +0xE0AF 0x7258 # <CJK> +0xE0B0 0x7274 # <CJK> +0xE0B1 0x727E # <CJK> +0xE0B2 0x7282 # <CJK> +0xE0B3 0x7281 # <CJK> +0xE0B4 0x7287 # <CJK> +0xE0B5 0x7292 # <CJK> +0xE0B6 0x7296 # <CJK> +0xE0B7 0x72A2 # <CJK> +0xE0B8 0x72A7 # <CJK> +0xE0B9 0x72B9 # <CJK> +0xE0BA 0x72B2 # <CJK> +0xE0BB 0x72C3 # <CJK> +0xE0BC 0x72C6 # <CJK> +0xE0BD 0x72C4 # <CJK> +0xE0BE 0x72CE # <CJK> +0xE0BF 0x72D2 # <CJK> +0xE0C0 0x72E2 # <CJK> +0xE0C1 0x72E0 # <CJK> +0xE0C2 0x72E1 # <CJK> +0xE0C3 0x72F9 # <CJK> +0xE0C4 0x72F7 # <CJK> +0xE0C5 0x500F # <CJK> +0xE0C6 0x7317 # <CJK> +0xE0C7 0x730A # <CJK> +0xE0C8 0x731C # <CJK> +0xE0C9 0x7316 # <CJK> +0xE0CA 0x731D # <CJK> +0xE0CB 0x7334 # <CJK> +0xE0CC 0x732F # <CJK> +0xE0CD 0x7329 # <CJK> +0xE0CE 0x7325 # <CJK> +0xE0CF 0x733E # <CJK> +0xE0D0 0x734E # <CJK> +0xE0D1 0x734F # <CJK> +0xE0D2 0x9ED8 # <CJK> +0xE0D3 0x7357 # <CJK> +0xE0D4 0x736A # <CJK> +0xE0D5 0x7368 # <CJK> +0xE0D6 0x7370 # <CJK> +0xE0D7 0x7378 # <CJK> +0xE0D8 0x7375 # <CJK> +0xE0D9 0x737B # <CJK> +0xE0DA 0x737A # <CJK> +0xE0DB 0x73C8 # <CJK> +0xE0DC 0x73B3 # <CJK> +0xE0DD 0x73CE # <CJK> +0xE0DE 0x73BB # <CJK> +0xE0DF 0x73C0 # <CJK> +0xE0E0 0x73E5 # <CJK> +0xE0E1 0x73EE # <CJK> +0xE0E2 0x73DE # <CJK> +0xE0E3 0x74A2 # <CJK> +0xE0E4 0x7405 # <CJK> +0xE0E5 0x746F # <CJK> +0xE0E6 0x7425 # <CJK> +0xE0E7 0x73F8 # <CJK> +0xE0E8 0x7432 # <CJK> +0xE0E9 0x743A # <CJK> +0xE0EA 0x7455 # <CJK> +0xE0EB 0x743F # <CJK> +0xE0EC 0x745F # <CJK> +0xE0ED 0x7459 # <CJK> +0xE0EE 0x7441 # <CJK> +0xE0EF 0x745C # <CJK> +0xE0F0 0x7469 # <CJK> +0xE0F1 0x7470 # <CJK> +0xE0F2 0x7463 # <CJK> +0xE0F3 0x746A # <CJK> +0xE0F4 0x7476 # <CJK> +0xE0F5 0x747E # <CJK> +0xE0F6 0x748B # <CJK> +0xE0F7 0x749E # <CJK> +0xE0F8 0x74A7 # <CJK> +0xE0F9 0x74CA # <CJK> +0xE0FA 0x74CF # <CJK> +0xE0FB 0x74D4 # <CJK> +0xE0FC 0x73F1 # <CJK> +0xE140 0x74E0 # <CJK> +0xE141 0x74E3 # <CJK> +0xE142 0x74E7 # <CJK> +0xE143 0x74E9 # <CJK> +0xE144 0x74EE # <CJK> +0xE145 0x74F2 # <CJK> +0xE146 0x74F0 # <CJK> +0xE147 0x74F1 # <CJK> +0xE148 0x74F8 # <CJK> +0xE149 0x74F7 # <CJK> +0xE14A 0x7504 # <CJK> +0xE14B 0x7503 # <CJK> +0xE14C 0x7505 # <CJK> +0xE14D 0x750C # <CJK> +0xE14E 0x750E # <CJK> +0xE14F 0x750D # <CJK> +0xE150 0x7515 # <CJK> +0xE151 0x7513 # <CJK> +0xE152 0x751E # <CJK> +0xE153 0x7526 # <CJK> +0xE154 0x752C # <CJK> +0xE155 0x753C # <CJK> +0xE156 0x7544 # <CJK> +0xE157 0x754D # <CJK> +0xE158 0x754A # <CJK> +0xE159 0x7549 # <CJK> +0xE15A 0x755B # <CJK> +0xE15B 0x7546 # <CJK> +0xE15C 0x755A # <CJK> +0xE15D 0x7569 # <CJK> +0xE15E 0x7564 # <CJK> +0xE15F 0x7567 # <CJK> +0xE160 0x756B # <CJK> +0xE161 0x756D # <CJK> +0xE162 0x7578 # <CJK> +0xE163 0x7576 # <CJK> +0xE164 0x7586 # <CJK> +0xE165 0x7587 # <CJK> +0xE166 0x7574 # <CJK> +0xE167 0x758A # <CJK> +0xE168 0x7589 # <CJK> +0xE169 0x7582 # <CJK> +0xE16A 0x7594 # <CJK> +0xE16B 0x759A # <CJK> +0xE16C 0x759D # <CJK> +0xE16D 0x75A5 # <CJK> +0xE16E 0x75A3 # <CJK> +0xE16F 0x75C2 # <CJK> +0xE170 0x75B3 # <CJK> +0xE171 0x75C3 # <CJK> +0xE172 0x75B5 # <CJK> +0xE173 0x75BD # <CJK> +0xE174 0x75B8 # <CJK> +0xE175 0x75BC # <CJK> +0xE176 0x75B1 # <CJK> +0xE177 0x75CD # <CJK> +0xE178 0x75CA # <CJK> +0xE179 0x75D2 # <CJK> +0xE17A 0x75D9 # <CJK> +0xE17B 0x75E3 # <CJK> +0xE17C 0x75DE # <CJK> +0xE17D 0x75FE # <CJK> +0xE17E 0x75FF # <CJK> +0xE180 0x75FC # <CJK> +0xE181 0x7601 # <CJK> +0xE182 0x75F0 # <CJK> +0xE183 0x75FA # <CJK> +0xE184 0x75F2 # <CJK> +0xE185 0x75F3 # <CJK> +0xE186 0x760B # <CJK> +0xE187 0x760D # <CJK> +0xE188 0x7609 # <CJK> +0xE189 0x761F # <CJK> +0xE18A 0x7627 # <CJK> +0xE18B 0x7620 # <CJK> +0xE18C 0x7621 # <CJK> +0xE18D 0x7622 # <CJK> +0xE18E 0x7624 # <CJK> +0xE18F 0x7634 # <CJK> +0xE190 0x7630 # <CJK> +0xE191 0x763B # <CJK> +0xE192 0x7647 # <CJK> +0xE193 0x7648 # <CJK> +0xE194 0x7646 # <CJK> +0xE195 0x765C # <CJK> +0xE196 0x7658 # <CJK> +0xE197 0x7661 # <CJK> +0xE198 0x7662 # <CJK> +0xE199 0x7668 # <CJK> +0xE19A 0x7669 # <CJK> +0xE19B 0x766A # <CJK> +0xE19C 0x7667 # <CJK> +0xE19D 0x766C # <CJK> +0xE19E 0x7670 # <CJK> +0xE19F 0x7672 # <CJK> +0xE1A0 0x7676 # <CJK> +0xE1A1 0x7678 # <CJK> +0xE1A2 0x767C # <CJK> +0xE1A3 0x7680 # <CJK> +0xE1A4 0x7683 # <CJK> +0xE1A5 0x7688 # <CJK> +0xE1A6 0x768B # <CJK> +0xE1A7 0x768E # <CJK> +0xE1A8 0x7696 # <CJK> +0xE1A9 0x7693 # <CJK> +0xE1AA 0x7699 # <CJK> +0xE1AB 0x769A # <CJK> +0xE1AC 0x76B0 # <CJK> +0xE1AD 0x76B4 # <CJK> +0xE1AE 0x76B8 # <CJK> +0xE1AF 0x76B9 # <CJK> +0xE1B0 0x76BA # <CJK> +0xE1B1 0x76C2 # <CJK> +0xE1B2 0x76CD # <CJK> +0xE1B3 0x76D6 # <CJK> +0xE1B4 0x76D2 # <CJK> +0xE1B5 0x76DE # <CJK> +0xE1B6 0x76E1 # <CJK> +0xE1B7 0x76E5 # <CJK> +0xE1B8 0x76E7 # <CJK> +0xE1B9 0x76EA # <CJK> +0xE1BA 0x862F # <CJK> +0xE1BB 0x76FB # <CJK> +0xE1BC 0x7708 # <CJK> +0xE1BD 0x7707 # <CJK> +0xE1BE 0x7704 # <CJK> +0xE1BF 0x7729 # <CJK> +0xE1C0 0x7724 # <CJK> +0xE1C1 0x771E # <CJK> +0xE1C2 0x7725 # <CJK> +0xE1C3 0x7726 # <CJK> +0xE1C4 0x771B # <CJK> +0xE1C5 0x7737 # <CJK> +0xE1C6 0x7738 # <CJK> +0xE1C7 0x7747 # <CJK> +0xE1C8 0x775A # <CJK> +0xE1C9 0x7768 # <CJK> +0xE1CA 0x776B # <CJK> +0xE1CB 0x775B # <CJK> +0xE1CC 0x7765 # <CJK> +0xE1CD 0x777F # <CJK> +0xE1CE 0x777E # <CJK> +0xE1CF 0x7779 # <CJK> +0xE1D0 0x778E # <CJK> +0xE1D1 0x778B # <CJK> +0xE1D2 0x7791 # <CJK> +0xE1D3 0x77A0 # <CJK> +0xE1D4 0x779E # <CJK> +0xE1D5 0x77B0 # <CJK> +0xE1D6 0x77B6 # <CJK> +0xE1D7 0x77B9 # <CJK> +0xE1D8 0x77BF # <CJK> +0xE1D9 0x77BC # <CJK> +0xE1DA 0x77BD # <CJK> +0xE1DB 0x77BB # <CJK> +0xE1DC 0x77C7 # <CJK> +0xE1DD 0x77CD # <CJK> +0xE1DE 0x77D7 # <CJK> +0xE1DF 0x77DA # <CJK> +0xE1E0 0x77DC # <CJK> +0xE1E1 0x77E3 # <CJK> +0xE1E2 0x77EE # <CJK> +0xE1E3 0x77FC # <CJK> +0xE1E4 0x780C # <CJK> +0xE1E5 0x7812 # <CJK> +0xE1E6 0x7926 # <CJK> +0xE1E7 0x7820 # <CJK> +0xE1E8 0x792A # <CJK> +0xE1E9 0x7845 # <CJK> +0xE1EA 0x788E # <CJK> +0xE1EB 0x7874 # <CJK> +0xE1EC 0x7886 # <CJK> +0xE1ED 0x787C # <CJK> +0xE1EE 0x789A # <CJK> +0xE1EF 0x788C # <CJK> +0xE1F0 0x78A3 # <CJK> +0xE1F1 0x78B5 # <CJK> +0xE1F2 0x78AA # <CJK> +0xE1F3 0x78AF # <CJK> +0xE1F4 0x78D1 # <CJK> +0xE1F5 0x78C6 # <CJK> +0xE1F6 0x78CB # <CJK> +0xE1F7 0x78D4 # <CJK> +0xE1F8 0x78BE # <CJK> +0xE1F9 0x78BC # <CJK> +0xE1FA 0x78C5 # <CJK> +0xE1FB 0x78CA # <CJK> +0xE1FC 0x78EC # <CJK> +0xE240 0x78E7 # <CJK> +0xE241 0x78DA # <CJK> +0xE242 0x78FD # <CJK> +0xE243 0x78F4 # <CJK> +0xE244 0x7907 # <CJK> +0xE245 0x7912 # <CJK> +0xE246 0x7911 # <CJK> +0xE247 0x7919 # <CJK> +0xE248 0x792C # <CJK> +0xE249 0x792B # <CJK> +0xE24A 0x7940 # <CJK> +0xE24B 0x7960 # <CJK> +0xE24C 0x7957 # <CJK> +0xE24D 0x795F # <CJK> +0xE24E 0x795A # <CJK> +0xE24F 0x7955 # <CJK> +0xE250 0x7953 # <CJK> +0xE251 0x797A # <CJK> +0xE252 0x797F # <CJK> +0xE253 0x798A # <CJK> +0xE254 0x799D # <CJK> +0xE255 0x79A7 # <CJK> +0xE256 0x9F4B # <CJK> +0xE257 0x79AA # <CJK> +0xE258 0x79AE # <CJK> +0xE259 0x79B3 # <CJK> +0xE25A 0x79B9 # <CJK> +0xE25B 0x79BA # <CJK> +0xE25C 0x79C9 # <CJK> +0xE25D 0x79D5 # <CJK> +0xE25E 0x79E7 # <CJK> +0xE25F 0x79EC # <CJK> +0xE260 0x79E1 # <CJK> +0xE261 0x79E3 # <CJK> +0xE262 0x7A08 # <CJK> +0xE263 0x7A0D # <CJK> +0xE264 0x7A18 # <CJK> +0xE265 0x7A19 # <CJK> +0xE266 0x7A20 # <CJK> +0xE267 0x7A1F # <CJK> +0xE268 0x7980 # <CJK> +0xE269 0x7A31 # <CJK> +0xE26A 0x7A3B # <CJK> +0xE26B 0x7A3E # <CJK> +0xE26C 0x7A37 # <CJK> +0xE26D 0x7A43 # <CJK> +0xE26E 0x7A57 # <CJK> +0xE26F 0x7A49 # <CJK> +0xE270 0x7A61 # <CJK> +0xE271 0x7A62 # <CJK> +0xE272 0x7A69 # <CJK> +0xE273 0x9F9D # <CJK> +0xE274 0x7A70 # <CJK> +0xE275 0x7A79 # <CJK> +0xE276 0x7A7D # <CJK> +0xE277 0x7A88 # <CJK> +0xE278 0x7A97 # <CJK> +0xE279 0x7A95 # <CJK> +0xE27A 0x7A98 # <CJK> +0xE27B 0x7A96 # <CJK> +0xE27C 0x7AA9 # <CJK> +0xE27D 0x7AC8 # <CJK> +0xE27E 0x7AB0 # <CJK> +0xE280 0x7AB6 # <CJK> +0xE281 0x7AC5 # <CJK> +0xE282 0x7AC4 # <CJK> +0xE283 0x7ABF # <CJK> +0xE284 0x9083 # <CJK> +0xE285 0x7AC7 # <CJK> +0xE286 0x7ACA # <CJK> +0xE287 0x7ACD # <CJK> +0xE288 0x7ACF # <CJK> +0xE289 0x7AD5 # <CJK> +0xE28A 0x7AD3 # <CJK> +0xE28B 0x7AD9 # <CJK> +0xE28C 0x7ADA # <CJK> +0xE28D 0x7ADD # <CJK> +0xE28E 0x7AE1 # <CJK> +0xE28F 0x7AE2 # <CJK> +0xE290 0x7AE6 # <CJK> +0xE291 0x7AED # <CJK> +0xE292 0x7AF0 # <CJK> +0xE293 0x7B02 # <CJK> +0xE294 0x7B0F # <CJK> +0xE295 0x7B0A # <CJK> +0xE296 0x7B06 # <CJK> +0xE297 0x7B33 # <CJK> +0xE298 0x7B18 # <CJK> +0xE299 0x7B19 # <CJK> +0xE29A 0x7B1E # <CJK> +0xE29B 0x7B35 # <CJK> +0xE29C 0x7B28 # <CJK> +0xE29D 0x7B36 # <CJK> +0xE29E 0x7B50 # <CJK> +0xE29F 0x7B7A # <CJK> +0xE2A0 0x7B04 # <CJK> +0xE2A1 0x7B4D # <CJK> +0xE2A2 0x7B0B # <CJK> +0xE2A3 0x7B4C # <CJK> +0xE2A4 0x7B45 # <CJK> +0xE2A5 0x7B75 # <CJK> +0xE2A6 0x7B65 # <CJK> +0xE2A7 0x7B74 # <CJK> +0xE2A8 0x7B67 # <CJK> +0xE2A9 0x7B70 # <CJK> +0xE2AA 0x7B71 # <CJK> +0xE2AB 0x7B6C # <CJK> +0xE2AC 0x7B6E # <CJK> +0xE2AD 0x7B9D # <CJK> +0xE2AE 0x7B98 # <CJK> +0xE2AF 0x7B9F # <CJK> +0xE2B0 0x7B8D # <CJK> +0xE2B1 0x7B9C # <CJK> +0xE2B2 0x7B9A # <CJK> +0xE2B3 0x7B8B # <CJK> +0xE2B4 0x7B92 # <CJK> +0xE2B5 0x7B8F # <CJK> +0xE2B6 0x7B5D # <CJK> +0xE2B7 0x7B99 # <CJK> +0xE2B8 0x7BCB # <CJK> +0xE2B9 0x7BC1 # <CJK> +0xE2BA 0x7BCC # <CJK> +0xE2BB 0x7BCF # <CJK> +0xE2BC 0x7BB4 # <CJK> +0xE2BD 0x7BC6 # <CJK> +0xE2BE 0x7BDD # <CJK> +0xE2BF 0x7BE9 # <CJK> +0xE2C0 0x7C11 # <CJK> +0xE2C1 0x7C14 # <CJK> +0xE2C2 0x7BE6 # <CJK> +0xE2C3 0x7BE5 # <CJK> +0xE2C4 0x7C60 # <CJK> +0xE2C5 0x7C00 # <CJK> +0xE2C6 0x7C07 # <CJK> +0xE2C7 0x7C13 # <CJK> +0xE2C8 0x7BF3 # <CJK> +0xE2C9 0x7BF7 # <CJK> +0xE2CA 0x7C17 # <CJK> +0xE2CB 0x7C0D # <CJK> +0xE2CC 0x7BF6 # <CJK> +0xE2CD 0x7C23 # <CJK> +0xE2CE 0x7C27 # <CJK> +0xE2CF 0x7C2A # <CJK> +0xE2D0 0x7C1F # <CJK> +0xE2D1 0x7C37 # <CJK> +0xE2D2 0x7C2B # <CJK> +0xE2D3 0x7C3D # <CJK> +0xE2D4 0x7C4C # <CJK> +0xE2D5 0x7C43 # <CJK> +0xE2D6 0x7C54 # <CJK> +0xE2D7 0x7C4F # <CJK> +0xE2D8 0x7C40 # <CJK> +0xE2D9 0x7C50 # <CJK> +0xE2DA 0x7C58 # <CJK> +0xE2DB 0x7C5F # <CJK> +0xE2DC 0x7C64 # <CJK> +0xE2DD 0x7C56 # <CJK> +0xE2DE 0x7C65 # <CJK> +0xE2DF 0x7C6C # <CJK> +0xE2E0 0x7C75 # <CJK> +0xE2E1 0x7C83 # <CJK> +0xE2E2 0x7C90 # <CJK> +0xE2E3 0x7CA4 # <CJK> +0xE2E4 0x7CAD # <CJK> +0xE2E5 0x7CA2 # <CJK> +0xE2E6 0x7CAB # <CJK> +0xE2E7 0x7CA1 # <CJK> +0xE2E8 0x7CA8 # <CJK> +0xE2E9 0x7CB3 # <CJK> +0xE2EA 0x7CB2 # <CJK> +0xE2EB 0x7CB1 # <CJK> +0xE2EC 0x7CAE # <CJK> +0xE2ED 0x7CB9 # <CJK> +0xE2EE 0x7CBD # <CJK> +0xE2EF 0x7CC0 # <CJK> +0xE2F0 0x7CC5 # <CJK> +0xE2F1 0x7CC2 # <CJK> +0xE2F2 0x7CD8 # <CJK> +0xE2F3 0x7CD2 # <CJK> +0xE2F4 0x7CDC # <CJK> +0xE2F5 0x7CE2 # <CJK> +0xE2F6 0x9B3B # <CJK> +0xE2F7 0x7CEF # <CJK> +0xE2F8 0x7CF2 # <CJK> +0xE2F9 0x7CF4 # <CJK> +0xE2FA 0x7CF6 # <CJK> +0xE2FB 0x7CFA # <CJK> +0xE2FC 0x7D06 # <CJK> +0xE340 0x7D02 # <CJK> +0xE341 0x7D1C # <CJK> +0xE342 0x7D15 # <CJK> +0xE343 0x7D0A # <CJK> +0xE344 0x7D45 # <CJK> +0xE345 0x7D4B # <CJK> +0xE346 0x7D2E # <CJK> +0xE347 0x7D32 # <CJK> +0xE348 0x7D3F # <CJK> +0xE349 0x7D35 # <CJK> +0xE34A 0x7D46 # <CJK> +0xE34B 0x7D73 # <CJK> +0xE34C 0x7D56 # <CJK> +0xE34D 0x7D4E # <CJK> +0xE34E 0x7D72 # <CJK> +0xE34F 0x7D68 # <CJK> +0xE350 0x7D6E # <CJK> +0xE351 0x7D4F # <CJK> +0xE352 0x7D63 # <CJK> +0xE353 0x7D93 # <CJK> +0xE354 0x7D89 # <CJK> +0xE355 0x7D5B # <CJK> +0xE356 0x7D8F # <CJK> +0xE357 0x7D7D # <CJK> +0xE358 0x7D9B # <CJK> +0xE359 0x7DBA # <CJK> +0xE35A 0x7DAE # <CJK> +0xE35B 0x7DA3 # <CJK> +0xE35C 0x7DB5 # <CJK> +0xE35D 0x7DC7 # <CJK> +0xE35E 0x7DBD # <CJK> +0xE35F 0x7DAB # <CJK> +0xE360 0x7E3D # <CJK> +0xE361 0x7DA2 # <CJK> +0xE362 0x7DAF # <CJK> +0xE363 0x7DDC # <CJK> +0xE364 0x7DB8 # <CJK> +0xE365 0x7D9F # <CJK> +0xE366 0x7DB0 # <CJK> +0xE367 0x7DD8 # <CJK> +0xE368 0x7DDD # <CJK> +0xE369 0x7DE4 # <CJK> +0xE36A 0x7DDE # <CJK> +0xE36B 0x7DFB # <CJK> +0xE36C 0x7DF2 # <CJK> +0xE36D 0x7DE1 # <CJK> +0xE36E 0x7E05 # <CJK> +0xE36F 0x7E0A # <CJK> +0xE370 0x7E23 # <CJK> +0xE371 0x7E21 # <CJK> +0xE372 0x7E12 # <CJK> +0xE373 0x7E31 # <CJK> +0xE374 0x7E1F # <CJK> +0xE375 0x7E09 # <CJK> +0xE376 0x7E0B # <CJK> +0xE377 0x7E22 # <CJK> +0xE378 0x7E46 # <CJK> +0xE379 0x7E66 # <CJK> +0xE37A 0x7E3B # <CJK> +0xE37B 0x7E35 # <CJK> +0xE37C 0x7E39 # <CJK> +0xE37D 0x7E43 # <CJK> +0xE37E 0x7E37 # <CJK> +0xE380 0x7E32 # <CJK> +0xE381 0x7E3A # <CJK> +0xE382 0x7E67 # <CJK> +0xE383 0x7E5D # <CJK> +0xE384 0x7E56 # <CJK> +0xE385 0x7E5E # <CJK> +0xE386 0x7E59 # <CJK> +0xE387 0x7E5A # <CJK> +0xE388 0x7E79 # <CJK> +0xE389 0x7E6A # <CJK> +0xE38A 0x7E69 # <CJK> +0xE38B 0x7E7C # <CJK> +0xE38C 0x7E7B # <CJK> +0xE38D 0x7E83 # <CJK> +0xE38E 0x7DD5 # <CJK> +0xE38F 0x7E7D # <CJK> +0xE390 0x8FAE # <CJK> +0xE391 0x7E7F # <CJK> +0xE392 0x7E88 # <CJK> +0xE393 0x7E89 # <CJK> +0xE394 0x7E8C # <CJK> +0xE395 0x7E92 # <CJK> +0xE396 0x7E90 # <CJK> +0xE397 0x7E93 # <CJK> +0xE398 0x7E94 # <CJK> +0xE399 0x7E96 # <CJK> +0xE39A 0x7E8E # <CJK> +0xE39B 0x7E9B # <CJK> +0xE39C 0x7E9C # <CJK> +0xE39D 0x7F38 # <CJK> +0xE39E 0x7F3A # <CJK> +0xE39F 0x7F45 # <CJK> +0xE3A0 0x7F4C # <CJK> +0xE3A1 0x7F4D # <CJK> +0xE3A2 0x7F4E # <CJK> +0xE3A3 0x7F50 # <CJK> +0xE3A4 0x7F51 # <CJK> +0xE3A5 0x7F55 # <CJK> +0xE3A6 0x7F54 # <CJK> +0xE3A7 0x7F58 # <CJK> +0xE3A8 0x7F5F # <CJK> +0xE3A9 0x7F60 # <CJK> +0xE3AA 0x7F68 # <CJK> +0xE3AB 0x7F69 # <CJK> +0xE3AC 0x7F67 # <CJK> +0xE3AD 0x7F78 # <CJK> +0xE3AE 0x7F82 # <CJK> +0xE3AF 0x7F86 # <CJK> +0xE3B0 0x7F83 # <CJK> +0xE3B1 0x7F88 # <CJK> +0xE3B2 0x7F87 # <CJK> +0xE3B3 0x7F8C # <CJK> +0xE3B4 0x7F94 # <CJK> +0xE3B5 0x7F9E # <CJK> +0xE3B6 0x7F9D # <CJK> +0xE3B7 0x7F9A # <CJK> +0xE3B8 0x7FA3 # <CJK> +0xE3B9 0x7FAF # <CJK> +0xE3BA 0x7FB2 # <CJK> +0xE3BB 0x7FB9 # <CJK> +0xE3BC 0x7FAE # <CJK> +0xE3BD 0x7FB6 # <CJK> +0xE3BE 0x7FB8 # <CJK> +0xE3BF 0x8B71 # <CJK> +0xE3C0 0x7FC5 # <CJK> +0xE3C1 0x7FC6 # <CJK> +0xE3C2 0x7FCA # <CJK> +0xE3C3 0x7FD5 # <CJK> +0xE3C4 0x7FD4 # <CJK> +0xE3C5 0x7FE1 # <CJK> +0xE3C6 0x7FE6 # <CJK> +0xE3C7 0x7FE9 # <CJK> +0xE3C8 0x7FF3 # <CJK> +0xE3C9 0x7FF9 # <CJK> +0xE3CA 0x98DC # <CJK> +0xE3CB 0x8006 # <CJK> +0xE3CC 0x8004 # <CJK> +0xE3CD 0x800B # <CJK> +0xE3CE 0x8012 # <CJK> +0xE3CF 0x8018 # <CJK> +0xE3D0 0x8019 # <CJK> +0xE3D1 0x801C # <CJK> +0xE3D2 0x8021 # <CJK> +0xE3D3 0x8028 # <CJK> +0xE3D4 0x803F # <CJK> +0xE3D5 0x803B # <CJK> +0xE3D6 0x804A # <CJK> +0xE3D7 0x8046 # <CJK> +0xE3D8 0x8052 # <CJK> +0xE3D9 0x8058 # <CJK> +0xE3DA 0x805A # <CJK> +0xE3DB 0x805F # <CJK> +0xE3DC 0x8062 # <CJK> +0xE3DD 0x8068 # <CJK> +0xE3DE 0x8073 # <CJK> +0xE3DF 0x8072 # <CJK> +0xE3E0 0x8070 # <CJK> +0xE3E1 0x8076 # <CJK> +0xE3E2 0x8079 # <CJK> +0xE3E3 0x807D # <CJK> +0xE3E4 0x807F # <CJK> +0xE3E5 0x8084 # <CJK> +0xE3E6 0x8086 # <CJK> +0xE3E7 0x8085 # <CJK> +0xE3E8 0x809B # <CJK> +0xE3E9 0x8093 # <CJK> +0xE3EA 0x809A # <CJK> +0xE3EB 0x80AD # <CJK> +0xE3EC 0x5190 # <CJK> +0xE3ED 0x80AC # <CJK> +0xE3EE 0x80DB # <CJK> +0xE3EF 0x80E5 # <CJK> +0xE3F0 0x80D9 # <CJK> +0xE3F1 0x80DD # <CJK> +0xE3F2 0x80C4 # <CJK> +0xE3F3 0x80DA # <CJK> +0xE3F4 0x80D6 # <CJK> +0xE3F5 0x8109 # <CJK> +0xE3F6 0x80EF # <CJK> +0xE3F7 0x80F1 # <CJK> +0xE3F8 0x811B # <CJK> +0xE3F9 0x8129 # <CJK> +0xE3FA 0x8123 # <CJK> +0xE3FB 0x812F # <CJK> +0xE3FC 0x814B # <CJK> +0xE440 0x968B # <CJK> +0xE441 0x8146 # <CJK> +0xE442 0x813E # <CJK> +0xE443 0x8153 # <CJK> +0xE444 0x8151 # <CJK> +0xE445 0x80FC # <CJK> +0xE446 0x8171 # <CJK> +0xE447 0x816E # <CJK> +0xE448 0x8165 # <CJK> +0xE449 0x8166 # <CJK> +0xE44A 0x8174 # <CJK> +0xE44B 0x8183 # <CJK> +0xE44C 0x8188 # <CJK> +0xE44D 0x818A # <CJK> +0xE44E 0x8180 # <CJK> +0xE44F 0x8182 # <CJK> +0xE450 0x81A0 # <CJK> +0xE451 0x8195 # <CJK> +0xE452 0x81A4 # <CJK> +0xE453 0x81A3 # <CJK> +0xE454 0x815F # <CJK> +0xE455 0x8193 # <CJK> +0xE456 0x81A9 # <CJK> +0xE457 0x81B0 # <CJK> +0xE458 0x81B5 # <CJK> +0xE459 0x81BE # <CJK> +0xE45A 0x81B8 # <CJK> +0xE45B 0x81BD # <CJK> +0xE45C 0x81C0 # <CJK> +0xE45D 0x81C2 # <CJK> +0xE45E 0x81BA # <CJK> +0xE45F 0x81C9 # <CJK> +0xE460 0x81CD # <CJK> +0xE461 0x81D1 # <CJK> +0xE462 0x81D9 # <CJK> +0xE463 0x81D8 # <CJK> +0xE464 0x81C8 # <CJK> +0xE465 0x81DA # <CJK> +0xE466 0x81DF # <CJK> +0xE467 0x81E0 # <CJK> +0xE468 0x81E7 # <CJK> +0xE469 0x81FA # <CJK> +0xE46A 0x81FB # <CJK> +0xE46B 0x81FE # <CJK> +0xE46C 0x8201 # <CJK> +0xE46D 0x8202 # <CJK> +0xE46E 0x8205 # <CJK> +0xE46F 0x8207 # <CJK> +0xE470 0x820A # <CJK> +0xE471 0x820D # <CJK> +0xE472 0x8210 # <CJK> +0xE473 0x8216 # <CJK> +0xE474 0x8229 # <CJK> +0xE475 0x822B # <CJK> +0xE476 0x8238 # <CJK> +0xE477 0x8233 # <CJK> +0xE478 0x8240 # <CJK> +0xE479 0x8259 # <CJK> +0xE47A 0x8258 # <CJK> +0xE47B 0x825D # <CJK> +0xE47C 0x825A # <CJK> +0xE47D 0x825F # <CJK> +0xE47E 0x8264 # <CJK> +0xE480 0x8262 # <CJK> +0xE481 0x8268 # <CJK> +0xE482 0x826A # <CJK> +0xE483 0x826B # <CJK> +0xE484 0x822E # <CJK> +0xE485 0x8271 # <CJK> +0xE486 0x8277 # <CJK> +0xE487 0x8278 # <CJK> +0xE488 0x827E # <CJK> +0xE489 0x828D # <CJK> +0xE48A 0x8292 # <CJK> +0xE48B 0x82AB # <CJK> +0xE48C 0x829F # <CJK> +0xE48D 0x82BB # <CJK> +0xE48E 0x82AC # <CJK> +0xE48F 0x82E1 # <CJK> +0xE490 0x82E3 # <CJK> +0xE491 0x82DF # <CJK> +0xE492 0x82D2 # <CJK> +0xE493 0x82F4 # <CJK> +0xE494 0x82F3 # <CJK> +0xE495 0x82FA # <CJK> +0xE496 0x8393 # <CJK> +0xE497 0x8303 # <CJK> +0xE498 0x82FB # <CJK> +0xE499 0x82F9 # <CJK> +0xE49A 0x82DE # <CJK> +0xE49B 0x8306 # <CJK> +0xE49C 0x82DC # <CJK> +0xE49D 0x8309 # <CJK> +0xE49E 0x82D9 # <CJK> +0xE49F 0x8335 # <CJK> +0xE4A0 0x8334 # <CJK> +0xE4A1 0x8316 # <CJK> +0xE4A2 0x8332 # <CJK> +0xE4A3 0x8331 # <CJK> +0xE4A4 0x8340 # <CJK> +0xE4A5 0x8339 # <CJK> +0xE4A6 0x8350 # <CJK> +0xE4A7 0x8345 # <CJK> +0xE4A8 0x832F # <CJK> +0xE4A9 0x832B # <CJK> +0xE4AA 0x8317 # <CJK> +0xE4AB 0x8318 # <CJK> +0xE4AC 0x8385 # <CJK> +0xE4AD 0x839A # <CJK> +0xE4AE 0x83AA # <CJK> +0xE4AF 0x839F # <CJK> +0xE4B0 0x83A2 # <CJK> +0xE4B1 0x8396 # <CJK> +0xE4B2 0x8323 # <CJK> +0xE4B3 0x838E # <CJK> +0xE4B4 0x8387 # <CJK> +0xE4B5 0x838A # <CJK> +0xE4B6 0x837C # <CJK> +0xE4B7 0x83B5 # <CJK> +0xE4B8 0x8373 # <CJK> +0xE4B9 0x8375 # <CJK> +0xE4BA 0x83A0 # <CJK> +0xE4BB 0x8389 # <CJK> +0xE4BC 0x83A8 # <CJK> +0xE4BD 0x83F4 # <CJK> +0xE4BE 0x8413 # <CJK> +0xE4BF 0x83EB # <CJK> +0xE4C0 0x83CE # <CJK> +0xE4C1 0x83FD # <CJK> +0xE4C2 0x8403 # <CJK> +0xE4C3 0x83D8 # <CJK> +0xE4C4 0x840B # <CJK> +0xE4C5 0x83C1 # <CJK> +0xE4C6 0x83F7 # <CJK> +0xE4C7 0x8407 # <CJK> +0xE4C8 0x83E0 # <CJK> +0xE4C9 0x83F2 # <CJK> +0xE4CA 0x840D # <CJK> +0xE4CB 0x8422 # <CJK> +0xE4CC 0x8420 # <CJK> +0xE4CD 0x83BD # <CJK> +0xE4CE 0x8438 # <CJK> +0xE4CF 0x8506 # <CJK> +0xE4D0 0x83FB # <CJK> +0xE4D1 0x846D # <CJK> +0xE4D2 0x842A # <CJK> +0xE4D3 0x843C # <CJK> +0xE4D4 0x855A # <CJK> +0xE4D5 0x8484 # <CJK> +0xE4D6 0x8477 # <CJK> +0xE4D7 0x846B # <CJK> +0xE4D8 0x84AD # <CJK> +0xE4D9 0x846E # <CJK> +0xE4DA 0x8482 # <CJK> +0xE4DB 0x8469 # <CJK> +0xE4DC 0x8446 # <CJK> +0xE4DD 0x842C # <CJK> +0xE4DE 0x846F # <CJK> +0xE4DF 0x8479 # <CJK> +0xE4E0 0x8435 # <CJK> +0xE4E1 0x84CA # <CJK> +0xE4E2 0x8462 # <CJK> +0xE4E3 0x84B9 # <CJK> +0xE4E4 0x84BF # <CJK> +0xE4E5 0x849F # <CJK> +0xE4E6 0x84D9 # <CJK> +0xE4E7 0x84CD # <CJK> +0xE4E8 0x84BB # <CJK> +0xE4E9 0x84DA # <CJK> +0xE4EA 0x84D0 # <CJK> +0xE4EB 0x84C1 # <CJK> +0xE4EC 0x84C6 # <CJK> +0xE4ED 0x84D6 # <CJK> +0xE4EE 0x84A1 # <CJK> +0xE4EF 0x8521 # <CJK> +0xE4F0 0x84FF # <CJK> +0xE4F1 0x84F4 # <CJK> +0xE4F2 0x8517 # <CJK> +0xE4F3 0x8518 # <CJK> +0xE4F4 0x852C # <CJK> +0xE4F5 0x851F # <CJK> +0xE4F6 0x8515 # <CJK> +0xE4F7 0x8514 # <CJK> +0xE4F8 0x84FC # <CJK> +0xE4F9 0x8540 # <CJK> +0xE4FA 0x8563 # <CJK> +0xE4FB 0x8558 # <CJK> +0xE4FC 0x8548 # <CJK> +0xE540 0x8541 # <CJK> +0xE541 0x8602 # <CJK> +0xE542 0x854B # <CJK> +0xE543 0x8555 # <CJK> +0xE544 0x8580 # <CJK> +0xE545 0x85A4 # <CJK> +0xE546 0x8588 # <CJK> +0xE547 0x8591 # <CJK> +0xE548 0x858A # <CJK> +0xE549 0x85A8 # <CJK> +0xE54A 0x856D # <CJK> +0xE54B 0x8594 # <CJK> +0xE54C 0x859B # <CJK> +0xE54D 0x85EA # <CJK> +0xE54E 0x8587 # <CJK> +0xE54F 0x859C # <CJK> +0xE550 0x8577 # <CJK> +0xE551 0x857E # <CJK> +0xE552 0x8590 # <CJK> +0xE553 0x85C9 # <CJK> +0xE554 0x85BA # <CJK> +0xE555 0x85CF # <CJK> +0xE556 0x85B9 # <CJK> +0xE557 0x85D0 # <CJK> +0xE558 0x85D5 # <CJK> +0xE559 0x85DD # <CJK> +0xE55A 0x85E5 # <CJK> +0xE55B 0x85DC # <CJK> +0xE55C 0x85F9 # <CJK> +0xE55D 0x860A # <CJK> +0xE55E 0x8613 # <CJK> +0xE55F 0x860B # <CJK> +0xE560 0x85FE # <CJK> +0xE561 0x85FA # <CJK> +0xE562 0x8606 # <CJK> +0xE563 0x8622 # <CJK> +0xE564 0x861A # <CJK> +0xE565 0x8630 # <CJK> +0xE566 0x863F # <CJK> +0xE567 0x864D # <CJK> +0xE568 0x4E55 # <CJK> +0xE569 0x8654 # <CJK> +0xE56A 0x865F # <CJK> +0xE56B 0x8667 # <CJK> +0xE56C 0x8671 # <CJK> +0xE56D 0x8693 # <CJK> +0xE56E 0x86A3 # <CJK> +0xE56F 0x86A9 # <CJK> +0xE570 0x86AA # <CJK> +0xE571 0x868B # <CJK> +0xE572 0x868C # <CJK> +0xE573 0x86B6 # <CJK> +0xE574 0x86AF # <CJK> +0xE575 0x86C4 # <CJK> +0xE576 0x86C6 # <CJK> +0xE577 0x86B0 # <CJK> +0xE578 0x86C9 # <CJK> +0xE579 0x8823 # <CJK> +0xE57A 0x86AB # <CJK> +0xE57B 0x86D4 # <CJK> +0xE57C 0x86DE # <CJK> +0xE57D 0x86E9 # <CJK> +0xE57E 0x86EC # <CJK> +0xE580 0x86DF # <CJK> +0xE581 0x86DB # <CJK> +0xE582 0x86EF # <CJK> +0xE583 0x8712 # <CJK> +0xE584 0x8706 # <CJK> +0xE585 0x8708 # <CJK> +0xE586 0x8700 # <CJK> +0xE587 0x8703 # <CJK> +0xE588 0x86FB # <CJK> +0xE589 0x8711 # <CJK> +0xE58A 0x8709 # <CJK> +0xE58B 0x870D # <CJK> +0xE58C 0x86F9 # <CJK> +0xE58D 0x870A # <CJK> +0xE58E 0x8734 # <CJK> +0xE58F 0x873F # <CJK> +0xE590 0x8737 # <CJK> +0xE591 0x873B # <CJK> +0xE592 0x8725 # <CJK> +0xE593 0x8729 # <CJK> +0xE594 0x871A # <CJK> +0xE595 0x8760 # <CJK> +0xE596 0x875F # <CJK> +0xE597 0x8778 # <CJK> +0xE598 0x874C # <CJK> +0xE599 0x874E # <CJK> +0xE59A 0x8774 # <CJK> +0xE59B 0x8757 # <CJK> +0xE59C 0x8768 # <CJK> +0xE59D 0x876E # <CJK> +0xE59E 0x8759 # <CJK> +0xE59F 0x8753 # <CJK> +0xE5A0 0x8763 # <CJK> +0xE5A1 0x876A # <CJK> +0xE5A2 0x8805 # <CJK> +0xE5A3 0x87A2 # <CJK> +0xE5A4 0x879F # <CJK> +0xE5A5 0x8782 # <CJK> +0xE5A6 0x87AF # <CJK> +0xE5A7 0x87CB # <CJK> +0xE5A8 0x87BD # <CJK> +0xE5A9 0x87C0 # <CJK> +0xE5AA 0x87D0 # <CJK> +0xE5AB 0x96D6 # <CJK> +0xE5AC 0x87AB # <CJK> +0xE5AD 0x87C4 # <CJK> +0xE5AE 0x87B3 # <CJK> +0xE5AF 0x87C7 # <CJK> +0xE5B0 0x87C6 # <CJK> +0xE5B1 0x87BB # <CJK> +0xE5B2 0x87EF # <CJK> +0xE5B3 0x87F2 # <CJK> +0xE5B4 0x87E0 # <CJK> +0xE5B5 0x880F # <CJK> +0xE5B6 0x880D # <CJK> +0xE5B7 0x87FE # <CJK> +0xE5B8 0x87F6 # <CJK> +0xE5B9 0x87F7 # <CJK> +0xE5BA 0x880E # <CJK> +0xE5BB 0x87D2 # <CJK> +0xE5BC 0x8811 # <CJK> +0xE5BD 0x8816 # <CJK> +0xE5BE 0x8815 # <CJK> +0xE5BF 0x8822 # <CJK> +0xE5C0 0x8821 # <CJK> +0xE5C1 0x8831 # <CJK> +0xE5C2 0x8836 # <CJK> +0xE5C3 0x8839 # <CJK> +0xE5C4 0x8827 # <CJK> +0xE5C5 0x883B # <CJK> +0xE5C6 0x8844 # <CJK> +0xE5C7 0x8842 # <CJK> +0xE5C8 0x8852 # <CJK> +0xE5C9 0x8859 # <CJK> +0xE5CA 0x885E # <CJK> +0xE5CB 0x8862 # <CJK> +0xE5CC 0x886B # <CJK> +0xE5CD 0x8881 # <CJK> +0xE5CE 0x887E # <CJK> +0xE5CF 0x889E # <CJK> +0xE5D0 0x8875 # <CJK> +0xE5D1 0x887D # <CJK> +0xE5D2 0x88B5 # <CJK> +0xE5D3 0x8872 # <CJK> +0xE5D4 0x8882 # <CJK> +0xE5D5 0x8897 # <CJK> +0xE5D6 0x8892 # <CJK> +0xE5D7 0x88AE # <CJK> +0xE5D8 0x8899 # <CJK> +0xE5D9 0x88A2 # <CJK> +0xE5DA 0x888D # <CJK> +0xE5DB 0x88A4 # <CJK> +0xE5DC 0x88B0 # <CJK> +0xE5DD 0x88BF # <CJK> +0xE5DE 0x88B1 # <CJK> +0xE5DF 0x88C3 # <CJK> +0xE5E0 0x88C4 # <CJK> +0xE5E1 0x88D4 # <CJK> +0xE5E2 0x88D8 # <CJK> +0xE5E3 0x88D9 # <CJK> +0xE5E4 0x88DD # <CJK> +0xE5E5 0x88F9 # <CJK> +0xE5E6 0x8902 # <CJK> +0xE5E7 0x88FC # <CJK> +0xE5E8 0x88F4 # <CJK> +0xE5E9 0x88E8 # <CJK> +0xE5EA 0x88F2 # <CJK> +0xE5EB 0x8904 # <CJK> +0xE5EC 0x890C # <CJK> +0xE5ED 0x890A # <CJK> +0xE5EE 0x8913 # <CJK> +0xE5EF 0x8943 # <CJK> +0xE5F0 0x891E # <CJK> +0xE5F1 0x8925 # <CJK> +0xE5F2 0x892A # <CJK> +0xE5F3 0x892B # <CJK> +0xE5F4 0x8941 # <CJK> +0xE5F5 0x8944 # <CJK> +0xE5F6 0x893B # <CJK> +0xE5F7 0x8936 # <CJK> +0xE5F8 0x8938 # <CJK> +0xE5F9 0x894C # <CJK> +0xE5FA 0x891D # <CJK> +0xE5FB 0x8960 # <CJK> +0xE5FC 0x895E # <CJK> +0xE640 0x8966 # <CJK> +0xE641 0x8964 # <CJK> +0xE642 0x896D # <CJK> +0xE643 0x896A # <CJK> +0xE644 0x896F # <CJK> +0xE645 0x8974 # <CJK> +0xE646 0x8977 # <CJK> +0xE647 0x897E # <CJK> +0xE648 0x8983 # <CJK> +0xE649 0x8988 # <CJK> +0xE64A 0x898A # <CJK> +0xE64B 0x8993 # <CJK> +0xE64C 0x8998 # <CJK> +0xE64D 0x89A1 # <CJK> +0xE64E 0x89A9 # <CJK> +0xE64F 0x89A6 # <CJK> +0xE650 0x89AC # <CJK> +0xE651 0x89AF # <CJK> +0xE652 0x89B2 # <CJK> +0xE653 0x89BA # <CJK> +0xE654 0x89BD # <CJK> +0xE655 0x89BF # <CJK> +0xE656 0x89C0 # <CJK> +0xE657 0x89DA # <CJK> +0xE658 0x89DC # <CJK> +0xE659 0x89DD # <CJK> +0xE65A 0x89E7 # <CJK> +0xE65B 0x89F4 # <CJK> +0xE65C 0x89F8 # <CJK> +0xE65D 0x8A03 # <CJK> +0xE65E 0x8A16 # <CJK> +0xE65F 0x8A10 # <CJK> +0xE660 0x8A0C # <CJK> +0xE661 0x8A1B # <CJK> +0xE662 0x8A1D # <CJK> +0xE663 0x8A25 # <CJK> +0xE664 0x8A36 # <CJK> +0xE665 0x8A41 # <CJK> +0xE666 0x8A5B # <CJK> +0xE667 0x8A52 # <CJK> +0xE668 0x8A46 # <CJK> +0xE669 0x8A48 # <CJK> +0xE66A 0x8A7C # <CJK> +0xE66B 0x8A6D # <CJK> +0xE66C 0x8A6C # <CJK> +0xE66D 0x8A62 # <CJK> +0xE66E 0x8A85 # <CJK> +0xE66F 0x8A82 # <CJK> +0xE670 0x8A84 # <CJK> +0xE671 0x8AA8 # <CJK> +0xE672 0x8AA1 # <CJK> +0xE673 0x8A91 # <CJK> +0xE674 0x8AA5 # <CJK> +0xE675 0x8AA6 # <CJK> +0xE676 0x8A9A # <CJK> +0xE677 0x8AA3 # <CJK> +0xE678 0x8AC4 # <CJK> +0xE679 0x8ACD # <CJK> +0xE67A 0x8AC2 # <CJK> +0xE67B 0x8ADA # <CJK> +0xE67C 0x8AEB # <CJK> +0xE67D 0x8AF3 # <CJK> +0xE67E 0x8AE7 # <CJK> +0xE680 0x8AE4 # <CJK> +0xE681 0x8AF1 # <CJK> +0xE682 0x8B14 # <CJK> +0xE683 0x8AE0 # <CJK> +0xE684 0x8AE2 # <CJK> +0xE685 0x8AF7 # <CJK> +0xE686 0x8ADE # <CJK> +0xE687 0x8ADB # <CJK> +0xE688 0x8B0C # <CJK> +0xE689 0x8B07 # <CJK> +0xE68A 0x8B1A # <CJK> +0xE68B 0x8AE1 # <CJK> +0xE68C 0x8B16 # <CJK> +0xE68D 0x8B10 # <CJK> +0xE68E 0x8B17 # <CJK> +0xE68F 0x8B20 # <CJK> +0xE690 0x8B33 # <CJK> +0xE691 0x97AB # <CJK> +0xE692 0x8B26 # <CJK> +0xE693 0x8B2B # <CJK> +0xE694 0x8B3E # <CJK> +0xE695 0x8B28 # <CJK> +0xE696 0x8B41 # <CJK> +0xE697 0x8B4C # <CJK> +0xE698 0x8B4F # <CJK> +0xE699 0x8B4E # <CJK> +0xE69A 0x8B49 # <CJK> +0xE69B 0x8B56 # <CJK> +0xE69C 0x8B5B # <CJK> +0xE69D 0x8B5A # <CJK> +0xE69E 0x8B6B # <CJK> +0xE69F 0x8B5F # <CJK> +0xE6A0 0x8B6C # <CJK> +0xE6A1 0x8B6F # <CJK> +0xE6A2 0x8B74 # <CJK> +0xE6A3 0x8B7D # <CJK> +0xE6A4 0x8B80 # <CJK> +0xE6A5 0x8B8C # <CJK> +0xE6A6 0x8B8E # <CJK> +0xE6A7 0x8B92 # <CJK> +0xE6A8 0x8B93 # <CJK> +0xE6A9 0x8B96 # <CJK> +0xE6AA 0x8B99 # <CJK> +0xE6AB 0x8B9A # <CJK> +0xE6AC 0x8C3A # <CJK> +0xE6AD 0x8C41 # <CJK> +0xE6AE 0x8C3F # <CJK> +0xE6AF 0x8C48 # <CJK> +0xE6B0 0x8C4C # <CJK> +0xE6B1 0x8C4E # <CJK> +0xE6B2 0x8C50 # <CJK> +0xE6B3 0x8C55 # <CJK> +0xE6B4 0x8C62 # <CJK> +0xE6B5 0x8C6C # <CJK> +0xE6B6 0x8C78 # <CJK> +0xE6B7 0x8C7A # <CJK> +0xE6B8 0x8C82 # <CJK> +0xE6B9 0x8C89 # <CJK> +0xE6BA 0x8C85 # <CJK> +0xE6BB 0x8C8A # <CJK> +0xE6BC 0x8C8D # <CJK> +0xE6BD 0x8C8E # <CJK> +0xE6BE 0x8C94 # <CJK> +0xE6BF 0x8C7C # <CJK> +0xE6C0 0x8C98 # <CJK> +0xE6C1 0x621D # <CJK> +0xE6C2 0x8CAD # <CJK> +0xE6C3 0x8CAA # <CJK> +0xE6C4 0x8CBD # <CJK> +0xE6C5 0x8CB2 # <CJK> +0xE6C6 0x8CB3 # <CJK> +0xE6C7 0x8CAE # <CJK> +0xE6C8 0x8CB6 # <CJK> +0xE6C9 0x8CC8 # <CJK> +0xE6CA 0x8CC1 # <CJK> +0xE6CB 0x8CE4 # <CJK> +0xE6CC 0x8CE3 # <CJK> +0xE6CD 0x8CDA # <CJK> +0xE6CE 0x8CFD # <CJK> +0xE6CF 0x8CFA # <CJK> +0xE6D0 0x8CFB # <CJK> +0xE6D1 0x8D04 # <CJK> +0xE6D2 0x8D05 # <CJK> +0xE6D3 0x8D0A # <CJK> +0xE6D4 0x8D07 # <CJK> +0xE6D5 0x8D0F # <CJK> +0xE6D6 0x8D0D # <CJK> +0xE6D7 0x8D10 # <CJK> +0xE6D8 0x9F4E # <CJK> +0xE6D9 0x8D13 # <CJK> +0xE6DA 0x8CCD # <CJK> +0xE6DB 0x8D14 # <CJK> +0xE6DC 0x8D16 # <CJK> +0xE6DD 0x8D67 # <CJK> +0xE6DE 0x8D6D # <CJK> +0xE6DF 0x8D71 # <CJK> +0xE6E0 0x8D73 # <CJK> +0xE6E1 0x8D81 # <CJK> +0xE6E2 0x8D99 # <CJK> +0xE6E3 0x8DC2 # <CJK> +0xE6E4 0x8DBE # <CJK> +0xE6E5 0x8DBA # <CJK> +0xE6E6 0x8DCF # <CJK> +0xE6E7 0x8DDA # <CJK> +0xE6E8 0x8DD6 # <CJK> +0xE6E9 0x8DCC # <CJK> +0xE6EA 0x8DDB # <CJK> +0xE6EB 0x8DCB # <CJK> +0xE6EC 0x8DEA # <CJK> +0xE6ED 0x8DEB # <CJK> +0xE6EE 0x8DDF # <CJK> +0xE6EF 0x8DE3 # <CJK> +0xE6F0 0x8DFC # <CJK> +0xE6F1 0x8E08 # <CJK> +0xE6F2 0x8E09 # <CJK> +0xE6F3 0x8DFF # <CJK> +0xE6F4 0x8E1D # <CJK> +0xE6F5 0x8E1E # <CJK> +0xE6F6 0x8E10 # <CJK> +0xE6F7 0x8E1F # <CJK> +0xE6F8 0x8E42 # <CJK> +0xE6F9 0x8E35 # <CJK> +0xE6FA 0x8E30 # <CJK> +0xE6FB 0x8E34 # <CJK> +0xE6FC 0x8E4A # <CJK> +0xE740 0x8E47 # <CJK> +0xE741 0x8E49 # <CJK> +0xE742 0x8E4C # <CJK> +0xE743 0x8E50 # <CJK> +0xE744 0x8E48 # <CJK> +0xE745 0x8E59 # <CJK> +0xE746 0x8E64 # <CJK> +0xE747 0x8E60 # <CJK> +0xE748 0x8E2A # <CJK> +0xE749 0x8E63 # <CJK> +0xE74A 0x8E55 # <CJK> +0xE74B 0x8E76 # <CJK> +0xE74C 0x8E72 # <CJK> +0xE74D 0x8E7C # <CJK> +0xE74E 0x8E81 # <CJK> +0xE74F 0x8E87 # <CJK> +0xE750 0x8E85 # <CJK> +0xE751 0x8E84 # <CJK> +0xE752 0x8E8B # <CJK> +0xE753 0x8E8A # <CJK> +0xE754 0x8E93 # <CJK> +0xE755 0x8E91 # <CJK> +0xE756 0x8E94 # <CJK> +0xE757 0x8E99 # <CJK> +0xE758 0x8EAA # <CJK> +0xE759 0x8EA1 # <CJK> +0xE75A 0x8EAC # <CJK> +0xE75B 0x8EB0 # <CJK> +0xE75C 0x8EC6 # <CJK> +0xE75D 0x8EB1 # <CJK> +0xE75E 0x8EBE # <CJK> +0xE75F 0x8EC5 # <CJK> +0xE760 0x8EC8 # <CJK> +0xE761 0x8ECB # <CJK> +0xE762 0x8EDB # <CJK> +0xE763 0x8EE3 # <CJK> +0xE764 0x8EFC # <CJK> +0xE765 0x8EFB # <CJK> +0xE766 0x8EEB # <CJK> +0xE767 0x8EFE # <CJK> +0xE768 0x8F0A # <CJK> +0xE769 0x8F05 # <CJK> +0xE76A 0x8F15 # <CJK> +0xE76B 0x8F12 # <CJK> +0xE76C 0x8F19 # <CJK> +0xE76D 0x8F13 # <CJK> +0xE76E 0x8F1C # <CJK> +0xE76F 0x8F1F # <CJK> +0xE770 0x8F1B # <CJK> +0xE771 0x8F0C # <CJK> +0xE772 0x8F26 # <CJK> +0xE773 0x8F33 # <CJK> +0xE774 0x8F3B # <CJK> +0xE775 0x8F39 # <CJK> +0xE776 0x8F45 # <CJK> +0xE777 0x8F42 # <CJK> +0xE778 0x8F3E # <CJK> +0xE779 0x8F4C # <CJK> +0xE77A 0x8F49 # <CJK> +0xE77B 0x8F46 # <CJK> +0xE77C 0x8F4E # <CJK> +0xE77D 0x8F57 # <CJK> +0xE77E 0x8F5C # <CJK> +0xE780 0x8F62 # <CJK> +0xE781 0x8F63 # <CJK> +0xE782 0x8F64 # <CJK> +0xE783 0x8F9C # <CJK> +0xE784 0x8F9F # <CJK> +0xE785 0x8FA3 # <CJK> +0xE786 0x8FAD # <CJK> +0xE787 0x8FAF # <CJK> +0xE788 0x8FB7 # <CJK> +0xE789 0x8FDA # <CJK> +0xE78A 0x8FE5 # <CJK> +0xE78B 0x8FE2 # <CJK> +0xE78C 0x8FEA # <CJK> +0xE78D 0x8FEF # <CJK> +0xE78E 0x9087 # <CJK> +0xE78F 0x8FF4 # <CJK> +0xE790 0x9005 # <CJK> +0xE791 0x8FF9 # <CJK> +0xE792 0x8FFA # <CJK> +0xE793 0x9011 # <CJK> +0xE794 0x9015 # <CJK> +0xE795 0x9021 # <CJK> +0xE796 0x900D # <CJK> +0xE797 0x901E # <CJK> +0xE798 0x9016 # <CJK> +0xE799 0x900B # <CJK> +0xE79A 0x9027 # <CJK> +0xE79B 0x9036 # <CJK> +0xE79C 0x9035 # <CJK> +0xE79D 0x9039 # <CJK> +0xE79E 0x8FF8 # <CJK> +0xE79F 0x904F # <CJK> +0xE7A0 0x9050 # <CJK> +0xE7A1 0x9051 # <CJK> +0xE7A2 0x9052 # <CJK> +0xE7A3 0x900E # <CJK> +0xE7A4 0x9049 # <CJK> +0xE7A5 0x903E # <CJK> +0xE7A6 0x9056 # <CJK> +0xE7A7 0x9058 # <CJK> +0xE7A8 0x905E # <CJK> +0xE7A9 0x9068 # <CJK> +0xE7AA 0x906F # <CJK> +0xE7AB 0x9076 # <CJK> +0xE7AC 0x96A8 # <CJK> +0xE7AD 0x9072 # <CJK> +0xE7AE 0x9082 # <CJK> +0xE7AF 0x907D # <CJK> +0xE7B0 0x9081 # <CJK> +0xE7B1 0x9080 # <CJK> +0xE7B2 0x908A # <CJK> +0xE7B3 0x9089 # <CJK> +0xE7B4 0x908F # <CJK> +0xE7B5 0x90A8 # <CJK> +0xE7B6 0x90AF # <CJK> +0xE7B7 0x90B1 # <CJK> +0xE7B8 0x90B5 # <CJK> +0xE7B9 0x90E2 # <CJK> +0xE7BA 0x90E4 # <CJK> +0xE7BB 0x6248 # <CJK> +0xE7BC 0x90DB # <CJK> +0xE7BD 0x9102 # <CJK> +0xE7BE 0x9112 # <CJK> +0xE7BF 0x9119 # <CJK> +0xE7C0 0x9132 # <CJK> +0xE7C1 0x9130 # <CJK> +0xE7C2 0x914A # <CJK> +0xE7C3 0x9156 # <CJK> +0xE7C4 0x9158 # <CJK> +0xE7C5 0x9163 # <CJK> +0xE7C6 0x9165 # <CJK> +0xE7C7 0x9169 # <CJK> +0xE7C8 0x9173 # <CJK> +0xE7C9 0x9172 # <CJK> +0xE7CA 0x918B # <CJK> +0xE7CB 0x9189 # <CJK> +0xE7CC 0x9182 # <CJK> +0xE7CD 0x91A2 # <CJK> +0xE7CE 0x91AB # <CJK> +0xE7CF 0x91AF # <CJK> +0xE7D0 0x91AA # <CJK> +0xE7D1 0x91B5 # <CJK> +0xE7D2 0x91B4 # <CJK> +0xE7D3 0x91BA # <CJK> +0xE7D4 0x91C0 # <CJK> +0xE7D5 0x91C1 # <CJK> +0xE7D6 0x91C9 # <CJK> +0xE7D7 0x91CB # <CJK> +0xE7D8 0x91D0 # <CJK> +0xE7D9 0x91D6 # <CJK> +0xE7DA 0x91DF # <CJK> +0xE7DB 0x91E1 # <CJK> +0xE7DC 0x91DB # <CJK> +0xE7DD 0x91FC # <CJK> +0xE7DE 0x91F5 # <CJK> +0xE7DF 0x91F6 # <CJK> +0xE7E0 0x921E # <CJK> +0xE7E1 0x91FF # <CJK> +0xE7E2 0x9214 # <CJK> +0xE7E3 0x922C # <CJK> +0xE7E4 0x9215 # <CJK> +0xE7E5 0x9211 # <CJK> +0xE7E6 0x925E # <CJK> +0xE7E7 0x9257 # <CJK> +0xE7E8 0x9245 # <CJK> +0xE7E9 0x9249 # <CJK> +0xE7EA 0x9264 # <CJK> +0xE7EB 0x9248 # <CJK> +0xE7EC 0x9295 # <CJK> +0xE7ED 0x923F # <CJK> +0xE7EE 0x924B # <CJK> +0xE7EF 0x9250 # <CJK> +0xE7F0 0x929C # <CJK> +0xE7F1 0x9296 # <CJK> +0xE7F2 0x9293 # <CJK> +0xE7F3 0x929B # <CJK> +0xE7F4 0x925A # <CJK> +0xE7F5 0x92CF # <CJK> +0xE7F6 0x92B9 # <CJK> +0xE7F7 0x92B7 # <CJK> +0xE7F8 0x92E9 # <CJK> +0xE7F9 0x930F # <CJK> +0xE7FA 0x92FA # <CJK> +0xE7FB 0x9344 # <CJK> +0xE7FC 0x932E # <CJK> +0xE840 0x9319 # <CJK> +0xE841 0x9322 # <CJK> +0xE842 0x931A # <CJK> +0xE843 0x9323 # <CJK> +0xE844 0x933A # <CJK> +0xE845 0x9335 # <CJK> +0xE846 0x933B # <CJK> +0xE847 0x935C # <CJK> +0xE848 0x9360 # <CJK> +0xE849 0x937C # <CJK> +0xE84A 0x936E # <CJK> +0xE84B 0x9356 # <CJK> +0xE84C 0x93B0 # <CJK> +0xE84D 0x93AC # <CJK> +0xE84E 0x93AD # <CJK> +0xE84F 0x9394 # <CJK> +0xE850 0x93B9 # <CJK> +0xE851 0x93D6 # <CJK> +0xE852 0x93D7 # <CJK> +0xE853 0x93E8 # <CJK> +0xE854 0x93E5 # <CJK> +0xE855 0x93D8 # <CJK> +0xE856 0x93C3 # <CJK> +0xE857 0x93DD # <CJK> +0xE858 0x93D0 # <CJK> +0xE859 0x93C8 # <CJK> +0xE85A 0x93E4 # <CJK> +0xE85B 0x941A # <CJK> +0xE85C 0x9414 # <CJK> +0xE85D 0x9413 # <CJK> +0xE85E 0x9403 # <CJK> +0xE85F 0x9407 # <CJK> +0xE860 0x9410 # <CJK> +0xE861 0x9436 # <CJK> +0xE862 0x942B # <CJK> +0xE863 0x9435 # <CJK> +0xE864 0x9421 # <CJK> +0xE865 0x943A # <CJK> +0xE866 0x9441 # <CJK> +0xE867 0x9452 # <CJK> +0xE868 0x9444 # <CJK> +0xE869 0x945B # <CJK> +0xE86A 0x9460 # <CJK> +0xE86B 0x9462 # <CJK> +0xE86C 0x945E # <CJK> +0xE86D 0x946A # <CJK> +0xE86E 0x9229 # <CJK> +0xE86F 0x9470 # <CJK> +0xE870 0x9475 # <CJK> +0xE871 0x9477 # <CJK> +0xE872 0x947D # <CJK> +0xE873 0x945A # <CJK> +0xE874 0x947C # <CJK> +0xE875 0x947E # <CJK> +0xE876 0x9481 # <CJK> +0xE877 0x947F # <CJK> +0xE878 0x9582 # <CJK> +0xE879 0x9587 # <CJK> +0xE87A 0x958A # <CJK> +0xE87B 0x9594 # <CJK> +0xE87C 0x9596 # <CJK> +0xE87D 0x9598 # <CJK> +0xE87E 0x9599 # <CJK> +0xE880 0x95A0 # <CJK> +0xE881 0x95A8 # <CJK> +0xE882 0x95A7 # <CJK> +0xE883 0x95AD # <CJK> +0xE884 0x95BC # <CJK> +0xE885 0x95BB # <CJK> +0xE886 0x95B9 # <CJK> +0xE887 0x95BE # <CJK> +0xE888 0x95CA # <CJK> +0xE889 0x6FF6 # <CJK> +0xE88A 0x95C3 # <CJK> +0xE88B 0x95CD # <CJK> +0xE88C 0x95CC # <CJK> +0xE88D 0x95D5 # <CJK> +0xE88E 0x95D4 # <CJK> +0xE88F 0x95D6 # <CJK> +0xE890 0x95DC # <CJK> +0xE891 0x95E1 # <CJK> +0xE892 0x95E5 # <CJK> +0xE893 0x95E2 # <CJK> +0xE894 0x9621 # <CJK> +0xE895 0x9628 # <CJK> +0xE896 0x962E # <CJK> +0xE897 0x962F # <CJK> +0xE898 0x9642 # <CJK> +0xE899 0x964C # <CJK> +0xE89A 0x964F # <CJK> +0xE89B 0x964B # <CJK> +0xE89C 0x9677 # <CJK> +0xE89D 0x965C # <CJK> +0xE89E 0x965E # <CJK> +0xE89F 0x965D # <CJK> +0xE8A0 0x965F # <CJK> +0xE8A1 0x9666 # <CJK> +0xE8A2 0x9672 # <CJK> +0xE8A3 0x966C # <CJK> +0xE8A4 0x968D # <CJK> +0xE8A5 0x9698 # <CJK> +0xE8A6 0x9695 # <CJK> +0xE8A7 0x9697 # <CJK> +0xE8A8 0x96AA # <CJK> +0xE8A9 0x96A7 # <CJK> +0xE8AA 0x96B1 # <CJK> +0xE8AB 0x96B2 # <CJK> +0xE8AC 0x96B0 # <CJK> +0xE8AD 0x96B4 # <CJK> +0xE8AE 0x96B6 # <CJK> +0xE8AF 0x96B8 # <CJK> +0xE8B0 0x96B9 # <CJK> +0xE8B1 0x96CE # <CJK> +0xE8B2 0x96CB # <CJK> +0xE8B3 0x96C9 # <CJK> +0xE8B4 0x96CD # <CJK> +0xE8B5 0x894D # <CJK> +0xE8B6 0x96DC # <CJK> +0xE8B7 0x970D # <CJK> +0xE8B8 0x96D5 # <CJK> +0xE8B9 0x96F9 # <CJK> +0xE8BA 0x9704 # <CJK> +0xE8BB 0x9706 # <CJK> +0xE8BC 0x9708 # <CJK> +0xE8BD 0x9713 # <CJK> +0xE8BE 0x970E # <CJK> +0xE8BF 0x9711 # <CJK> +0xE8C0 0x970F # <CJK> +0xE8C1 0x9716 # <CJK> +0xE8C2 0x9719 # <CJK> +0xE8C3 0x9724 # <CJK> +0xE8C4 0x972A # <CJK> +0xE8C5 0x9730 # <CJK> +0xE8C6 0x9739 # <CJK> +0xE8C7 0x973D # <CJK> +0xE8C8 0x973E # <CJK> +0xE8C9 0x9744 # <CJK> +0xE8CA 0x9746 # <CJK> +0xE8CB 0x9748 # <CJK> +0xE8CC 0x9742 # <CJK> +0xE8CD 0x9749 # <CJK> +0xE8CE 0x975C # <CJK> +0xE8CF 0x9760 # <CJK> +0xE8D0 0x9764 # <CJK> +0xE8D1 0x9766 # <CJK> +0xE8D2 0x9768 # <CJK> +0xE8D3 0x52D2 # <CJK> +0xE8D4 0x976B # <CJK> +0xE8D5 0x9771 # <CJK> +0xE8D6 0x9779 # <CJK> +0xE8D7 0x9785 # <CJK> +0xE8D8 0x977C # <CJK> +0xE8D9 0x9781 # <CJK> +0xE8DA 0x977A # <CJK> +0xE8DB 0x9786 # <CJK> +0xE8DC 0x978B # <CJK> +0xE8DD 0x978F # <CJK> +0xE8DE 0x9790 # <CJK> +0xE8DF 0x979C # <CJK> +0xE8E0 0x97A8 # <CJK> +0xE8E1 0x97A6 # <CJK> +0xE8E2 0x97A3 # <CJK> +0xE8E3 0x97B3 # <CJK> +0xE8E4 0x97B4 # <CJK> +0xE8E5 0x97C3 # <CJK> +0xE8E6 0x97C6 # <CJK> +0xE8E7 0x97C8 # <CJK> +0xE8E8 0x97CB # <CJK> +0xE8E9 0x97DC # <CJK> +0xE8EA 0x97ED # <CJK> +0xE8EB 0x9F4F # <CJK> +0xE8EC 0x97F2 # <CJK> +0xE8ED 0x7ADF # <CJK> +0xE8EE 0x97F6 # <CJK> +0xE8EF 0x97F5 # <CJK> +0xE8F0 0x980F # <CJK> +0xE8F1 0x980C # <CJK> +0xE8F2 0x9838 # <CJK> +0xE8F3 0x9824 # <CJK> +0xE8F4 0x9821 # <CJK> +0xE8F5 0x9837 # <CJK> +0xE8F6 0x983D # <CJK> +0xE8F7 0x9846 # <CJK> +0xE8F8 0x984F # <CJK> +0xE8F9 0x984B # <CJK> +0xE8FA 0x986B # <CJK> +0xE8FB 0x986F # <CJK> +0xE8FC 0x9870 # <CJK> +0xE940 0x9871 # <CJK> +0xE941 0x9874 # <CJK> +0xE942 0x9873 # <CJK> +0xE943 0x98AA # <CJK> +0xE944 0x98AF # <CJK> +0xE945 0x98B1 # <CJK> +0xE946 0x98B6 # <CJK> +0xE947 0x98C4 # <CJK> +0xE948 0x98C3 # <CJK> +0xE949 0x98C6 # <CJK> +0xE94A 0x98E9 # <CJK> +0xE94B 0x98EB # <CJK> +0xE94C 0x9903 # <CJK> +0xE94D 0x9909 # <CJK> +0xE94E 0x9912 # <CJK> +0xE94F 0x9914 # <CJK> +0xE950 0x9918 # <CJK> +0xE951 0x9921 # <CJK> +0xE952 0x991D # <CJK> +0xE953 0x991E # <CJK> +0xE954 0x9924 # <CJK> +0xE955 0x9920 # <CJK> +0xE956 0x992C # <CJK> +0xE957 0x992E # <CJK> +0xE958 0x993D # <CJK> +0xE959 0x993E # <CJK> +0xE95A 0x9942 # <CJK> +0xE95B 0x9949 # <CJK> +0xE95C 0x9945 # <CJK> +0xE95D 0x9950 # <CJK> +0xE95E 0x994B # <CJK> +0xE95F 0x9951 # <CJK> +0xE960 0x9952 # <CJK> +0xE961 0x994C # <CJK> +0xE962 0x9955 # <CJK> +0xE963 0x9997 # <CJK> +0xE964 0x9998 # <CJK> +0xE965 0x99A5 # <CJK> +0xE966 0x99AD # <CJK> +0xE967 0x99AE # <CJK> +0xE968 0x99BC # <CJK> +0xE969 0x99DF # <CJK> +0xE96A 0x99DB # <CJK> +0xE96B 0x99DD # <CJK> +0xE96C 0x99D8 # <CJK> +0xE96D 0x99D1 # <CJK> +0xE96E 0x99ED # <CJK> +0xE96F 0x99EE # <CJK> +0xE970 0x99F1 # <CJK> +0xE971 0x99F2 # <CJK> +0xE972 0x99FB # <CJK> +0xE973 0x99F8 # <CJK> +0xE974 0x9A01 # <CJK> +0xE975 0x9A0F # <CJK> +0xE976 0x9A05 # <CJK> +0xE977 0x99E2 # <CJK> +0xE978 0x9A19 # <CJK> +0xE979 0x9A2B # <CJK> +0xE97A 0x9A37 # <CJK> +0xE97B 0x9A45 # <CJK> +0xE97C 0x9A42 # <CJK> +0xE97D 0x9A40 # <CJK> +0xE97E 0x9A43 # <CJK> +0xE980 0x9A3E # <CJK> +0xE981 0x9A55 # <CJK> +0xE982 0x9A4D # <CJK> +0xE983 0x9A5B # <CJK> +0xE984 0x9A57 # <CJK> +0xE985 0x9A5F # <CJK> +0xE986 0x9A62 # <CJK> +0xE987 0x9A65 # <CJK> +0xE988 0x9A64 # <CJK> +0xE989 0x9A69 # <CJK> +0xE98A 0x9A6B # <CJK> +0xE98B 0x9A6A # <CJK> +0xE98C 0x9AAD # <CJK> +0xE98D 0x9AB0 # <CJK> +0xE98E 0x9ABC # <CJK> +0xE98F 0x9AC0 # <CJK> +0xE990 0x9ACF # <CJK> +0xE991 0x9AD1 # <CJK> +0xE992 0x9AD3 # <CJK> +0xE993 0x9AD4 # <CJK> +0xE994 0x9ADE # <CJK> +0xE995 0x9ADF # <CJK> +0xE996 0x9AE2 # <CJK> +0xE997 0x9AE3 # <CJK> +0xE998 0x9AE6 # <CJK> +0xE999 0x9AEF # <CJK> +0xE99A 0x9AEB # <CJK> +0xE99B 0x9AEE # <CJK> +0xE99C 0x9AF4 # <CJK> +0xE99D 0x9AF1 # <CJK> +0xE99E 0x9AF7 # <CJK> +0xE99F 0x9AFB # <CJK> +0xE9A0 0x9B06 # <CJK> +0xE9A1 0x9B18 # <CJK> +0xE9A2 0x9B1A # <CJK> +0xE9A3 0x9B1F # <CJK> +0xE9A4 0x9B22 # <CJK> +0xE9A5 0x9B23 # <CJK> +0xE9A6 0x9B25 # <CJK> +0xE9A7 0x9B27 # <CJK> +0xE9A8 0x9B28 # <CJK> +0xE9A9 0x9B29 # <CJK> +0xE9AA 0x9B2A # <CJK> +0xE9AB 0x9B2E # <CJK> +0xE9AC 0x9B2F # <CJK> +0xE9AD 0x9B32 # <CJK> +0xE9AE 0x9B44 # <CJK> +0xE9AF 0x9B43 # <CJK> +0xE9B0 0x9B4F # <CJK> +0xE9B1 0x9B4D # <CJK> +0xE9B2 0x9B4E # <CJK> +0xE9B3 0x9B51 # <CJK> +0xE9B4 0x9B58 # <CJK> +0xE9B5 0x9B74 # <CJK> +0xE9B6 0x9B93 # <CJK> +0xE9B7 0x9B83 # <CJK> +0xE9B8 0x9B91 # <CJK> +0xE9B9 0x9B96 # <CJK> +0xE9BA 0x9B97 # <CJK> +0xE9BB 0x9B9F # <CJK> +0xE9BC 0x9BA0 # <CJK> +0xE9BD 0x9BA8 # <CJK> +0xE9BE 0x9BB4 # <CJK> +0xE9BF 0x9BC0 # <CJK> +0xE9C0 0x9BCA # <CJK> +0xE9C1 0x9BB9 # <CJK> +0xE9C2 0x9BC6 # <CJK> +0xE9C3 0x9BCF # <CJK> +0xE9C4 0x9BD1 # <CJK> +0xE9C5 0x9BD2 # <CJK> +0xE9C6 0x9BE3 # <CJK> +0xE9C7 0x9BE2 # <CJK> +0xE9C8 0x9BE4 # <CJK> +0xE9C9 0x9BD4 # <CJK> +0xE9CA 0x9BE1 # <CJK> +0xE9CB 0x9C3A # <CJK> +0xE9CC 0x9BF2 # <CJK> +0xE9CD 0x9BF1 # <CJK> +0xE9CE 0x9BF0 # <CJK> +0xE9CF 0x9C15 # <CJK> +0xE9D0 0x9C14 # <CJK> +0xE9D1 0x9C09 # <CJK> +0xE9D2 0x9C13 # <CJK> +0xE9D3 0x9C0C # <CJK> +0xE9D4 0x9C06 # <CJK> +0xE9D5 0x9C08 # <CJK> +0xE9D6 0x9C12 # <CJK> +0xE9D7 0x9C0A # <CJK> +0xE9D8 0x9C04 # <CJK> +0xE9D9 0x9C2E # <CJK> +0xE9DA 0x9C1B # <CJK> +0xE9DB 0x9C25 # <CJK> +0xE9DC 0x9C24 # <CJK> +0xE9DD 0x9C21 # <CJK> +0xE9DE 0x9C30 # <CJK> +0xE9DF 0x9C47 # <CJK> +0xE9E0 0x9C32 # <CJK> +0xE9E1 0x9C46 # <CJK> +0xE9E2 0x9C3E # <CJK> +0xE9E3 0x9C5A # <CJK> +0xE9E4 0x9C60 # <CJK> +0xE9E5 0x9C67 # <CJK> +0xE9E6 0x9C76 # <CJK> +0xE9E7 0x9C78 # <CJK> +0xE9E8 0x9CE7 # <CJK> +0xE9E9 0x9CEC # <CJK> +0xE9EA 0x9CF0 # <CJK> +0xE9EB 0x9D09 # <CJK> +0xE9EC 0x9D08 # <CJK> +0xE9ED 0x9CEB # <CJK> +0xE9EE 0x9D03 # <CJK> +0xE9EF 0x9D06 # <CJK> +0xE9F0 0x9D2A # <CJK> +0xE9F1 0x9D26 # <CJK> +0xE9F2 0x9DAF # <CJK> +0xE9F3 0x9D23 # <CJK> +0xE9F4 0x9D1F # <CJK> +0xE9F5 0x9D44 # <CJK> +0xE9F6 0x9D15 # <CJK> +0xE9F7 0x9D12 # <CJK> +0xE9F8 0x9D41 # <CJK> +0xE9F9 0x9D3F # <CJK> +0xE9FA 0x9D3E # <CJK> +0xE9FB 0x9D46 # <CJK> +0xE9FC 0x9D48 # <CJK> +0xEA40 0x9D5D # <CJK> +0xEA41 0x9D5E # <CJK> +0xEA42 0x9D64 # <CJK> +0xEA43 0x9D51 # <CJK> +0xEA44 0x9D50 # <CJK> +0xEA45 0x9D59 # <CJK> +0xEA46 0x9D72 # <CJK> +0xEA47 0x9D89 # <CJK> +0xEA48 0x9D87 # <CJK> +0xEA49 0x9DAB # <CJK> +0xEA4A 0x9D6F # <CJK> +0xEA4B 0x9D7A # <CJK> +0xEA4C 0x9D9A # <CJK> +0xEA4D 0x9DA4 # <CJK> +0xEA4E 0x9DA9 # <CJK> +0xEA4F 0x9DB2 # <CJK> +0xEA50 0x9DC4 # <CJK> +0xEA51 0x9DC1 # <CJK> +0xEA52 0x9DBB # <CJK> +0xEA53 0x9DB8 # <CJK> +0xEA54 0x9DBA # <CJK> +0xEA55 0x9DC6 # <CJK> +0xEA56 0x9DCF # <CJK> +0xEA57 0x9DC2 # <CJK> +0xEA58 0x9DD9 # <CJK> +0xEA59 0x9DD3 # <CJK> +0xEA5A 0x9DF8 # <CJK> +0xEA5B 0x9DE6 # <CJK> +0xEA5C 0x9DED # <CJK> +0xEA5D 0x9DEF # <CJK> +0xEA5E 0x9DFD # <CJK> +0xEA5F 0x9E1A # <CJK> +0xEA60 0x9E1B # <CJK> +0xEA61 0x9E1E # <CJK> +0xEA62 0x9E75 # <CJK> +0xEA63 0x9E79 # <CJK> +0xEA64 0x9E7D # <CJK> +0xEA65 0x9E81 # <CJK> +0xEA66 0x9E88 # <CJK> +0xEA67 0x9E8B # <CJK> +0xEA68 0x9E8C # <CJK> +0xEA69 0x9E92 # <CJK> +0xEA6A 0x9E95 # <CJK> +0xEA6B 0x9E91 # <CJK> +0xEA6C 0x9E9D # <CJK> +0xEA6D 0x9EA5 # <CJK> +0xEA6E 0x9EA9 # <CJK> +0xEA6F 0x9EB8 # <CJK> +0xEA70 0x9EAA # <CJK> +0xEA71 0x9EAD # <CJK> +0xEA72 0x9761 # <CJK> +0xEA73 0x9ECC # <CJK> +0xEA74 0x9ECE # <CJK> +0xEA75 0x9ECF # <CJK> +0xEA76 0x9ED0 # <CJK> +0xEA77 0x9ED4 # <CJK> +0xEA78 0x9EDC # <CJK> +0xEA79 0x9EDE # <CJK> +0xEA7A 0x9EDD # <CJK> +0xEA7B 0x9EE0 # <CJK> +0xEA7C 0x9EE5 # <CJK> +0xEA7D 0x9EE8 # <CJK> +0xEA7E 0x9EEF # <CJK> +0xEA80 0x9EF4 # <CJK> +0xEA81 0x9EF6 # <CJK> +0xEA82 0x9EF7 # <CJK> +0xEA83 0x9EF9 # <CJK> +0xEA84 0x9EFB # <CJK> +0xEA85 0x9EFC # <CJK> +0xEA86 0x9EFD # <CJK> +0xEA87 0x9F07 # <CJK> +0xEA88 0x9F08 # <CJK> +0xEA89 0x76B7 # <CJK> +0xEA8A 0x9F15 # <CJK> +0xEA8B 0x9F21 # <CJK> +0xEA8C 0x9F2C # <CJK> +0xEA8D 0x9F3E # <CJK> +0xEA8E 0x9F4A # <CJK> +0xEA8F 0x9F52 # <CJK> +0xEA90 0x9F54 # <CJK> +0xEA91 0x9F63 # <CJK> +0xEA92 0x9F5F # <CJK> +0xEA93 0x9F60 # <CJK> +0xEA94 0x9F61 # <CJK> +0xEA95 0x9F66 # <CJK> +0xEA96 0x9F67 # <CJK> +0xEA97 0x9F6C # <CJK> +0xEA98 0x9F6A # <CJK> +0xEA99 0x9F77 # <CJK> +0xEA9A 0x9F72 # <CJK> +0xEA9B 0x9F76 # <CJK> +0xEA9C 0x9F95 # <CJK> +0xEA9D 0x9F9C # <CJK> +0xEA9E 0x9FA0 # <CJK> +0xEA9F 0x582F # <CJK> +0xEAA0 0x69C7 # <CJK> +0xEAA1 0x9059 # <CJK> +0xEAA2 0x7464 # <CJK> +0xEAA3 0x51DC # <CJK> +0xEAA4 0x7199 # <CJK> + +# Apple additions - vertical forms +0xEB41 0x3001+0xF87E # vertical form for IDEOGRAPHIC COMMA +0xEB42 0x3002+0xF87E # vertical form for IDEOGRAPHIC FULL STOP +0xEB50 0xFFE3+0xF87E # vertical form for FULLWIDTH MACRON +0xEB51 0xFE33 # PRESENTATION FORM FOR VERTICAL LOW LINE, U+FF3F +0xEB5B 0x30FC+0xF87E # vertical form for KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xEB5C 0xFE31 # PRESENTATION FORM FOR VERTICAL EM DASH, U+2014 +0xEB5D 0x2010+0xF87E # vertical form for HYPHEN +0xEB60 0x301C+0xF87E # vertical form for WAVE DASH +0xEB61 0x2016+0xF87E # vertical form for DOUBLE VERTICAL LINE +0xEB62 0xFF5C+0xF87E # vertical form for FULLWIDTH VERTICAL LINE +0xEB63 0x2026+0xF87E # vertical form for HORIZONTAL ELLIPSIS +0xEB64 0xFE30 # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER, U+2025 +0xEB69 0xFE35 # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS, U+FF08 +0xEB6A 0xFE36 # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS, U+FF09 +0xEB6B 0xFE39 # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET, U+3014 +0xEB6C 0xFE3A # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET, U+3015 +0xEB6D 0xFF3B+0xF87E # vertical form for FULLWIDTH LEFT SQUARE BRACKET # or for Unicode 4.0, 0xFE47 PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +0xEB6E 0xFF3D+0xF87E # vertical form for FULLWIDTH RIGHT SQUARE BRACKET # or for Unicode 4.0, 0xFE48 PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +0xEB6F 0xFE37 # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET, U+FF5B +0xEB70 0xFE38 # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET, U+FF5D +0xEB71 0xFE3F # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET, U+3008 +0xEB72 0xFE40 # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET, U+3009 +0xEB73 0xFE3D # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET, U+300A +0xEB74 0xFE3E # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET, U+300B +0xEB75 0xFE41 # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET, U+300C +0xEB76 0xFE42 # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET, U+300D +0xEB77 0xFE43 # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET, U+300E +0xEB78 0xFE44 # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET, U+300F +0xEB79 0xFE3B # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET, U+3010 +0xEB7A 0xFE3C # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET, U+3011 +0xEB81 0xFF1D+0xF87E # vertical form for FULLWIDTH EQUALS SIGN +0xEC9F 0x3041+0xF87E # vertical form for HIRAGANA LETTER SMALL A +0xECA1 0x3043+0xF87E # vertical form for HIRAGANA LETTER SMALL I +0xECA3 0x3045+0xF87E # vertical form for HIRAGANA LETTER SMALL U +0xECA5 0x3047+0xF87E # vertical form for HIRAGANA LETTER SMALL E +0xECA7 0x3049+0xF87E # vertical form for HIRAGANA LETTER SMALL O +0xECC1 0x3063+0xF87E # vertical form for HIRAGANA LETTER SMALL TU +0xECE1 0x3083+0xF87E # vertical form for HIRAGANA LETTER SMALL YA +0xECE3 0x3085+0xF87E # vertical form for HIRAGANA LETTER SMALL YU +0xECE5 0x3087+0xF87E # vertical form for HIRAGANA LETTER SMALL YO +0xECEC 0x308E+0xF87E # vertical form for HIRAGANA LETTER SMALL WA +0xED40 0x30A1+0xF87E # vertical form for KATAKANA LETTER SMALL A +0xED42 0x30A3+0xF87E # vertical form for KATAKANA LETTER SMALL I +0xED44 0x30A5+0xF87E # vertical form for KATAKANA LETTER SMALL U +0xED46 0x30A7+0xF87E # vertical form for KATAKANA LETTER SMALL E +0xED48 0x30A9+0xF87E # vertical form for KATAKANA LETTER SMALL O +0xED62 0x30C3+0xF87E # vertical form for KATAKANA LETTER SMALL TU +0xED83 0x30E3+0xF87E # vertical form for KATAKANA LETTER SMALL YA +0xED85 0x30E5+0xF87E # vertical form for KATAKANA LETTER SMALL YU +0xED87 0x30E7+0xF87E # vertical form for KATAKANA LETTER SMALL YO +0xED8E 0x30EE+0xF87E # vertical form for KATAKANA LETTER SMALL WA +0xED95 0x30F5+0xF87E # vertical form for KATAKANA LETTER SMALL KA +0xED96 0x30F6+0xF87E # vertical form for KATAKANA LETTER SMALL KE diff --git a/ext/mbstring/tests/data/SHIFTJIS.txt b/ext/mbstring/tests/data/SHIFTJIS.txt new file mode 100644 index 0000000000..757d5a1099 --- /dev/null +++ b/ext/mbstring/tests/data/SHIFTJIS.txt @@ -0,0 +1,7097 @@ +# SHIFTJIS.TXT +# Date: 2015-12-02 23:52:00 GMT [KW] +# © 2015 Unicode®, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Name: Shift-JIS to Unicode +# Unicode version: 1.1 +# Table version: 2.0 +# Table format: Format A +# Date: 2011 October 14 (header updated: 2015 December 02) +# +# General notes: +# +# +# This table contains one set of mappings from Shift-JIS 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 Shift-JIS and Unicode, consult the +# VENDORS mapping data. +# +# +# Format: Three tab-separated columns +# Column #1 is the shift-JIS code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# The official names for Unicode characters U+4E00 +# to U+9FA5, inclusive, is "CJK UNIFIED IDEOGRAPH-XXXX", +# where XXXX is the code point. Including all these +# names in this file increases its size substantially +# and needlessly. The token "<CJK>" is used for the +# name of these characters. If necessary, it can be +# expanded algorithmically by a parser or editor. +# +# The entries are ordered by their Shift-JIS codes as follows: +# Single-byte characters precede double-byte characters +# The single-byte and double-byte blocks are in ascending +# hexadecimal order +# There is an alternative order some people might be preferred, +# where all the entries are in order of the top (or only) byte. +# This alternate order can be generated from the one given here +# by a simple sort. +# +# Revision History: +# +# [v2.0, 2015 December 02] +# updates to copyright notice and terms of use +# no changes to character mappings +# +# [v1.0, 2011 October 14] +# Updated terms of use to current wording. +# Updated contact information. +# No changes to the mapping data. +# +# [v0.9, 8 March 1994] +# First release. +# +# Use the Unicode reporting form <http://www.unicode.org/reporting.html> +# for any questions or comments or to report errors in the data. +# +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 0x00A5 # YEN SIGN +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 0x203E # OVERLINE +0x8140 0x3000 # IDEOGRAPHIC SPACE +0x8141 0x3001 # IDEOGRAPHIC COMMA +0x8142 0x3002 # IDEOGRAPHIC FULL STOP +0x8143 0xFF0C # FULLWIDTH COMMA +0x8144 0xFF0E # FULLWIDTH FULL STOP +0x8145 0x30FB # KATAKANA MIDDLE DOT +0x8146 0xFF1A # FULLWIDTH COLON +0x8147 0xFF1B # FULLWIDTH SEMICOLON +0x8148 0xFF1F # FULLWIDTH QUESTION MARK +0x8149 0xFF01 # FULLWIDTH EXCLAMATION MARK +0x814A 0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x814B 0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x814C 0x00B4 # ACUTE ACCENT +0x814D 0xFF40 # FULLWIDTH GRAVE ACCENT +0x814E 0x00A8 # DIAERESIS +0x814F 0xFF3E # FULLWIDTH CIRCUMFLEX ACCENT +0x8150 0xFFE3 # FULLWIDTH MACRON +0x8151 0xFF3F # FULLWIDTH LOW LINE +0x8152 0x30FD # KATAKANA ITERATION MARK +0x8153 0x30FE # KATAKANA VOICED ITERATION MARK +0x8154 0x309D # HIRAGANA ITERATION MARK +0x8155 0x309E # HIRAGANA VOICED ITERATION MARK +0x8156 0x3003 # DITTO MARK +0x8157 0x4EDD # <CJK> +0x8158 0x3005 # IDEOGRAPHIC ITERATION MARK +0x8159 0x3006 # IDEOGRAPHIC CLOSING MARK +0x815A 0x3007 # IDEOGRAPHIC NUMBER ZERO +0x815B 0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x815C 0x2015 # HORIZONTAL BAR +0x815D 0x2010 # HYPHEN +0x815E 0xFF0F # FULLWIDTH SOLIDUS +0x815F 0x005C # REVERSE SOLIDUS +0x8160 0x301C # WAVE DASH +0x8161 0x2016 # DOUBLE VERTICAL LINE +0x8162 0xFF5C # FULLWIDTH VERTICAL LINE +0x8163 0x2026 # HORIZONTAL ELLIPSIS +0x8164 0x2025 # TWO DOT LEADER +0x8165 0x2018 # LEFT SINGLE QUOTATION MARK +0x8166 0x2019 # RIGHT SINGLE QUOTATION MARK +0x8167 0x201C # LEFT DOUBLE QUOTATION MARK +0x8168 0x201D # RIGHT DOUBLE QUOTATION MARK +0x8169 0xFF08 # FULLWIDTH LEFT PARENTHESIS +0x816A 0xFF09 # FULLWIDTH RIGHT PARENTHESIS +0x816B 0x3014 # LEFT TORTOISE SHELL BRACKET +0x816C 0x3015 # RIGHT TORTOISE SHELL BRACKET +0x816D 0xFF3B # FULLWIDTH LEFT SQUARE BRACKET +0x816E 0xFF3D # FULLWIDTH RIGHT SQUARE BRACKET +0x816F 0xFF5B # FULLWIDTH LEFT CURLY BRACKET +0x8170 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET +0x8171 0x3008 # LEFT ANGLE BRACKET +0x8172 0x3009 # RIGHT ANGLE BRACKET +0x8173 0x300A # LEFT DOUBLE ANGLE BRACKET +0x8174 0x300B # RIGHT DOUBLE ANGLE BRACKET +0x8175 0x300C # LEFT CORNER BRACKET +0x8176 0x300D # RIGHT CORNER BRACKET +0x8177 0x300E # LEFT WHITE CORNER BRACKET +0x8178 0x300F # RIGHT WHITE CORNER BRACKET +0x8179 0x3010 # LEFT BLACK LENTICULAR BRACKET +0x817A 0x3011 # RIGHT BLACK LENTICULAR BRACKET +0x817B 0xFF0B # FULLWIDTH PLUS SIGN +0x817C 0x2212 # MINUS SIGN +0x817D 0x00B1 # PLUS-MINUS SIGN +0x817E 0x00D7 # MULTIPLICATION SIGN +0x8180 0x00F7 # DIVISION SIGN +0x8181 0xFF1D # FULLWIDTH EQUALS SIGN +0x8182 0x2260 # NOT EQUAL TO +0x8183 0xFF1C # FULLWIDTH LESS-THAN SIGN +0x8184 0xFF1E # FULLWIDTH GREATER-THAN SIGN +0x8185 0x2266 # LESS-THAN OVER EQUAL TO +0x8186 0x2267 # GREATER-THAN OVER EQUAL TO +0x8187 0x221E # INFINITY +0x8188 0x2234 # THEREFORE +0x8189 0x2642 # MALE SIGN +0x818A 0x2640 # FEMALE SIGN +0x818B 0x00B0 # DEGREE SIGN +0x818C 0x2032 # PRIME +0x818D 0x2033 # DOUBLE PRIME +0x818E 0x2103 # DEGREE CELSIUS +0x818F 0xFFE5 # FULLWIDTH YEN SIGN +0x8190 0xFF04 # FULLWIDTH DOLLAR SIGN +0x8191 0x00A2 # CENT SIGN +0x8192 0x00A3 # POUND SIGN +0x8193 0xFF05 # FULLWIDTH PERCENT SIGN +0x8194 0xFF03 # FULLWIDTH NUMBER SIGN +0x8195 0xFF06 # FULLWIDTH AMPERSAND +0x8196 0xFF0A # FULLWIDTH ASTERISK +0x8197 0xFF20 # FULLWIDTH COMMERCIAL AT +0x8198 0x00A7 # SECTION SIGN +0x8199 0x2606 # WHITE STAR +0x819A 0x2605 # BLACK STAR +0x819B 0x25CB # WHITE CIRCLE +0x819C 0x25CF # BLACK CIRCLE +0x819D 0x25CE # BULLSEYE +0x819E 0x25C7 # WHITE DIAMOND +0x819F 0x25C6 # BLACK DIAMOND +0x81A0 0x25A1 # WHITE SQUARE +0x81A1 0x25A0 # BLACK SQUARE +0x81A2 0x25B3 # WHITE UP-POINTING TRIANGLE +0x81A3 0x25B2 # BLACK UP-POINTING TRIANGLE +0x81A4 0x25BD # WHITE DOWN-POINTING TRIANGLE +0x81A5 0x25BC # BLACK DOWN-POINTING TRIANGLE +0x81A6 0x203B # REFERENCE MARK +0x81A7 0x3012 # POSTAL MARK +0x81A8 0x2192 # RIGHTWARDS ARROW +0x81A9 0x2190 # LEFTWARDS ARROW +0x81AA 0x2191 # UPWARDS ARROW +0x81AB 0x2193 # DOWNWARDS ARROW +0x81AC 0x3013 # GETA MARK +0x81B8 0x2208 # ELEMENT OF +0x81B9 0x220B # CONTAINS AS MEMBER +0x81BA 0x2286 # SUBSET OF OR EQUAL TO +0x81BB 0x2287 # SUPERSET OF OR EQUAL TO +0x81BC 0x2282 # SUBSET OF +0x81BD 0x2283 # SUPERSET OF +0x81BE 0x222A # UNION +0x81BF 0x2229 # INTERSECTION +0x81C8 0x2227 # LOGICAL AND +0x81C9 0x2228 # LOGICAL OR +0x81CA 0x00AC # NOT SIGN +0x81CB 0x21D2 # RIGHTWARDS DOUBLE ARROW +0x81CC 0x21D4 # LEFT RIGHT DOUBLE ARROW +0x81CD 0x2200 # FOR ALL +0x81CE 0x2203 # THERE EXISTS +0x81DA 0x2220 # ANGLE +0x81DB 0x22A5 # UP TACK +0x81DC 0x2312 # ARC +0x81DD 0x2202 # PARTIAL DIFFERENTIAL +0x81DE 0x2207 # NABLA +0x81DF 0x2261 # IDENTICAL TO +0x81E0 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF +0x81E1 0x226A # MUCH LESS-THAN +0x81E2 0x226B # MUCH GREATER-THAN +0x81E3 0x221A # SQUARE ROOT +0x81E4 0x223D # REVERSED TILDE +0x81E5 0x221D # PROPORTIONAL TO +0x81E6 0x2235 # BECAUSE +0x81E7 0x222B # INTEGRAL +0x81E8 0x222C # DOUBLE INTEGRAL +0x81F0 0x212B # ANGSTROM SIGN +0x81F1 0x2030 # PER MILLE SIGN +0x81F2 0x266F # MUSIC SHARP SIGN +0x81F3 0x266D # MUSIC FLAT SIGN +0x81F4 0x266A # EIGHTH NOTE +0x81F5 0x2020 # DAGGER +0x81F6 0x2021 # DOUBLE DAGGER +0x81F7 0x00B6 # PILCROW SIGN +0x81FC 0x25EF # LARGE CIRCLE +0x824F 0xFF10 # FULLWIDTH DIGIT ZERO +0x8250 0xFF11 # FULLWIDTH DIGIT ONE +0x8251 0xFF12 # FULLWIDTH DIGIT TWO +0x8252 0xFF13 # FULLWIDTH DIGIT THREE +0x8253 0xFF14 # FULLWIDTH DIGIT FOUR +0x8254 0xFF15 # FULLWIDTH DIGIT FIVE +0x8255 0xFF16 # FULLWIDTH DIGIT SIX +0x8256 0xFF17 # FULLWIDTH DIGIT SEVEN +0x8257 0xFF18 # FULLWIDTH DIGIT EIGHT +0x8258 0xFF19 # FULLWIDTH DIGIT NINE +0x8260 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A +0x8261 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B +0x8262 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C +0x8263 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D +0x8264 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E +0x8265 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F +0x8266 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G +0x8267 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H +0x8268 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I +0x8269 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J +0x826A 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K +0x826B 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L +0x826C 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M +0x826D 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N +0x826E 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O +0x826F 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P +0x8270 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q +0x8271 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R +0x8272 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S +0x8273 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T +0x8274 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U +0x8275 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V +0x8276 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W +0x8277 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X +0x8278 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y +0x8279 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z +0x8281 0xFF41 # FULLWIDTH LATIN SMALL LETTER A +0x8282 0xFF42 # FULLWIDTH LATIN SMALL LETTER B +0x8283 0xFF43 # FULLWIDTH LATIN SMALL LETTER C +0x8284 0xFF44 # FULLWIDTH LATIN SMALL LETTER D +0x8285 0xFF45 # FULLWIDTH LATIN SMALL LETTER E +0x8286 0xFF46 # FULLWIDTH LATIN SMALL LETTER F +0x8287 0xFF47 # FULLWIDTH LATIN SMALL LETTER G +0x8288 0xFF48 # FULLWIDTH LATIN SMALL LETTER H +0x8289 0xFF49 # FULLWIDTH LATIN SMALL LETTER I +0x828A 0xFF4A # FULLWIDTH LATIN SMALL LETTER J +0x828B 0xFF4B # FULLWIDTH LATIN SMALL LETTER K +0x828C 0xFF4C # FULLWIDTH LATIN SMALL LETTER L +0x828D 0xFF4D # FULLWIDTH LATIN SMALL LETTER M +0x828E 0xFF4E # FULLWIDTH LATIN SMALL LETTER N +0x828F 0xFF4F # FULLWIDTH LATIN SMALL LETTER O +0x8290 0xFF50 # FULLWIDTH LATIN SMALL LETTER P +0x8291 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q +0x8292 0xFF52 # FULLWIDTH LATIN SMALL LETTER R +0x8293 0xFF53 # FULLWIDTH LATIN SMALL LETTER S +0x8294 0xFF54 # FULLWIDTH LATIN SMALL LETTER T +0x8295 0xFF55 # FULLWIDTH LATIN SMALL LETTER U +0x8296 0xFF56 # FULLWIDTH LATIN SMALL LETTER V +0x8297 0xFF57 # FULLWIDTH LATIN SMALL LETTER W +0x8298 0xFF58 # FULLWIDTH LATIN SMALL LETTER X +0x8299 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y +0x829A 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z +0x829F 0x3041 # HIRAGANA LETTER SMALL A +0x82A0 0x3042 # HIRAGANA LETTER A +0x82A1 0x3043 # HIRAGANA LETTER SMALL I +0x82A2 0x3044 # HIRAGANA LETTER I +0x82A3 0x3045 # HIRAGANA LETTER SMALL U +0x82A4 0x3046 # HIRAGANA LETTER U +0x82A5 0x3047 # HIRAGANA LETTER SMALL E +0x82A6 0x3048 # HIRAGANA LETTER E +0x82A7 0x3049 # HIRAGANA LETTER SMALL O +0x82A8 0x304A # HIRAGANA LETTER O +0x82A9 0x304B # HIRAGANA LETTER KA +0x82AA 0x304C # HIRAGANA LETTER GA +0x82AB 0x304D # HIRAGANA LETTER KI +0x82AC 0x304E # HIRAGANA LETTER GI +0x82AD 0x304F # HIRAGANA LETTER KU +0x82AE 0x3050 # HIRAGANA LETTER GU +0x82AF 0x3051 # HIRAGANA LETTER KE +0x82B0 0x3052 # HIRAGANA LETTER GE +0x82B1 0x3053 # HIRAGANA LETTER KO +0x82B2 0x3054 # HIRAGANA LETTER GO +0x82B3 0x3055 # HIRAGANA LETTER SA +0x82B4 0x3056 # HIRAGANA LETTER ZA +0x82B5 0x3057 # HIRAGANA LETTER SI +0x82B6 0x3058 # HIRAGANA LETTER ZI +0x82B7 0x3059 # HIRAGANA LETTER SU +0x82B8 0x305A # HIRAGANA LETTER ZU +0x82B9 0x305B # HIRAGANA LETTER SE +0x82BA 0x305C # HIRAGANA LETTER ZE +0x82BB 0x305D # HIRAGANA LETTER SO +0x82BC 0x305E # HIRAGANA LETTER ZO +0x82BD 0x305F # HIRAGANA LETTER TA +0x82BE 0x3060 # HIRAGANA LETTER DA +0x82BF 0x3061 # HIRAGANA LETTER TI +0x82C0 0x3062 # HIRAGANA LETTER DI +0x82C1 0x3063 # HIRAGANA LETTER SMALL TU +0x82C2 0x3064 # HIRAGANA LETTER TU +0x82C3 0x3065 # HIRAGANA LETTER DU +0x82C4 0x3066 # HIRAGANA LETTER TE +0x82C5 0x3067 # HIRAGANA LETTER DE +0x82C6 0x3068 # HIRAGANA LETTER TO +0x82C7 0x3069 # HIRAGANA LETTER DO +0x82C8 0x306A # HIRAGANA LETTER NA +0x82C9 0x306B # HIRAGANA LETTER NI +0x82CA 0x306C # HIRAGANA LETTER NU +0x82CB 0x306D # HIRAGANA LETTER NE +0x82CC 0x306E # HIRAGANA LETTER NO +0x82CD 0x306F # HIRAGANA LETTER HA +0x82CE 0x3070 # HIRAGANA LETTER BA +0x82CF 0x3071 # HIRAGANA LETTER PA +0x82D0 0x3072 # HIRAGANA LETTER HI +0x82D1 0x3073 # HIRAGANA LETTER BI +0x82D2 0x3074 # HIRAGANA LETTER PI +0x82D3 0x3075 # HIRAGANA LETTER HU +0x82D4 0x3076 # HIRAGANA LETTER BU +0x82D5 0x3077 # HIRAGANA LETTER PU +0x82D6 0x3078 # HIRAGANA LETTER HE +0x82D7 0x3079 # HIRAGANA LETTER BE +0x82D8 0x307A # HIRAGANA LETTER PE +0x82D9 0x307B # HIRAGANA LETTER HO +0x82DA 0x307C # HIRAGANA LETTER BO +0x82DB 0x307D # HIRAGANA LETTER PO +0x82DC 0x307E # HIRAGANA LETTER MA +0x82DD 0x307F # HIRAGANA LETTER MI +0x82DE 0x3080 # HIRAGANA LETTER MU +0x82DF 0x3081 # HIRAGANA LETTER ME +0x82E0 0x3082 # HIRAGANA LETTER MO +0x82E1 0x3083 # HIRAGANA LETTER SMALL YA +0x82E2 0x3084 # HIRAGANA LETTER YA +0x82E3 0x3085 # HIRAGANA LETTER SMALL YU +0x82E4 0x3086 # HIRAGANA LETTER YU +0x82E5 0x3087 # HIRAGANA LETTER SMALL YO +0x82E6 0x3088 # HIRAGANA LETTER YO +0x82E7 0x3089 # HIRAGANA LETTER RA +0x82E8 0x308A # HIRAGANA LETTER RI +0x82E9 0x308B # HIRAGANA LETTER RU +0x82EA 0x308C # HIRAGANA LETTER RE +0x82EB 0x308D # HIRAGANA LETTER RO +0x82EC 0x308E # HIRAGANA LETTER SMALL WA +0x82ED 0x308F # HIRAGANA LETTER WA +0x82EE 0x3090 # HIRAGANA LETTER WI +0x82EF 0x3091 # HIRAGANA LETTER WE +0x82F0 0x3092 # HIRAGANA LETTER WO +0x82F1 0x3093 # HIRAGANA LETTER N +0x8340 0x30A1 # KATAKANA LETTER SMALL A +0x8341 0x30A2 # KATAKANA LETTER A +0x8342 0x30A3 # KATAKANA LETTER SMALL I +0x8343 0x30A4 # KATAKANA LETTER I +0x8344 0x30A5 # KATAKANA LETTER SMALL U +0x8345 0x30A6 # KATAKANA LETTER U +0x8346 0x30A7 # KATAKANA LETTER SMALL E +0x8347 0x30A8 # KATAKANA LETTER E +0x8348 0x30A9 # KATAKANA LETTER SMALL O +0x8349 0x30AA # KATAKANA LETTER O +0x834A 0x30AB # KATAKANA LETTER KA +0x834B 0x30AC # KATAKANA LETTER GA +0x834C 0x30AD # KATAKANA LETTER KI +0x834D 0x30AE # KATAKANA LETTER GI +0x834E 0x30AF # KATAKANA LETTER KU +0x834F 0x30B0 # KATAKANA LETTER GU +0x8350 0x30B1 # KATAKANA LETTER KE +0x8351 0x30B2 # KATAKANA LETTER GE +0x8352 0x30B3 # KATAKANA LETTER KO +0x8353 0x30B4 # KATAKANA LETTER GO +0x8354 0x30B5 # KATAKANA LETTER SA +0x8355 0x30B6 # KATAKANA LETTER ZA +0x8356 0x30B7 # KATAKANA LETTER SI +0x8357 0x30B8 # KATAKANA LETTER ZI +0x8358 0x30B9 # KATAKANA LETTER SU +0x8359 0x30BA # KATAKANA LETTER ZU +0x835A 0x30BB # KATAKANA LETTER SE +0x835B 0x30BC # KATAKANA LETTER ZE +0x835C 0x30BD # KATAKANA LETTER SO +0x835D 0x30BE # KATAKANA LETTER ZO +0x835E 0x30BF # KATAKANA LETTER TA +0x835F 0x30C0 # KATAKANA LETTER DA +0x8360 0x30C1 # KATAKANA LETTER TI +0x8361 0x30C2 # KATAKANA LETTER DI +0x8362 0x30C3 # KATAKANA LETTER SMALL TU +0x8363 0x30C4 # KATAKANA LETTER TU +0x8364 0x30C5 # KATAKANA LETTER DU +0x8365 0x30C6 # KATAKANA LETTER TE +0x8366 0x30C7 # KATAKANA LETTER DE +0x8367 0x30C8 # KATAKANA LETTER TO +0x8368 0x30C9 # KATAKANA LETTER DO +0x8369 0x30CA # KATAKANA LETTER NA +0x836A 0x30CB # KATAKANA LETTER NI +0x836B 0x30CC # KATAKANA LETTER NU +0x836C 0x30CD # KATAKANA LETTER NE +0x836D 0x30CE # KATAKANA LETTER NO +0x836E 0x30CF # KATAKANA LETTER HA +0x836F 0x30D0 # KATAKANA LETTER BA +0x8370 0x30D1 # KATAKANA LETTER PA +0x8371 0x30D2 # KATAKANA LETTER HI +0x8372 0x30D3 # KATAKANA LETTER BI +0x8373 0x30D4 # KATAKANA LETTER PI +0x8374 0x30D5 # KATAKANA LETTER HU +0x8375 0x30D6 # KATAKANA LETTER BU +0x8376 0x30D7 # KATAKANA LETTER PU +0x8377 0x30D8 # KATAKANA LETTER HE +0x8378 0x30D9 # KATAKANA LETTER BE +0x8379 0x30DA # KATAKANA LETTER PE +0x837A 0x30DB # KATAKANA LETTER HO +0x837B 0x30DC # KATAKANA LETTER BO +0x837C 0x30DD # KATAKANA LETTER PO +0x837D 0x30DE # KATAKANA LETTER MA +0x837E 0x30DF # KATAKANA LETTER MI +0x8380 0x30E0 # KATAKANA LETTER MU +0x8381 0x30E1 # KATAKANA LETTER ME +0x8382 0x30E2 # KATAKANA LETTER MO +0x8383 0x30E3 # KATAKANA LETTER SMALL YA +0x8384 0x30E4 # KATAKANA LETTER YA +0x8385 0x30E5 # KATAKANA LETTER SMALL YU +0x8386 0x30E6 # KATAKANA LETTER YU +0x8387 0x30E7 # KATAKANA LETTER SMALL YO +0x8388 0x30E8 # KATAKANA LETTER YO +0x8389 0x30E9 # KATAKANA LETTER RA +0x838A 0x30EA # KATAKANA LETTER RI +0x838B 0x30EB # KATAKANA LETTER RU +0x838C 0x30EC # KATAKANA LETTER RE +0x838D 0x30ED # KATAKANA LETTER RO +0x838E 0x30EE # KATAKANA LETTER SMALL WA +0x838F 0x30EF # KATAKANA LETTER WA +0x8390 0x30F0 # KATAKANA LETTER WI +0x8391 0x30F1 # KATAKANA LETTER WE +0x8392 0x30F2 # KATAKANA LETTER WO +0x8393 0x30F3 # KATAKANA LETTER N +0x8394 0x30F4 # KATAKANA LETTER VU +0x8395 0x30F5 # KATAKANA LETTER SMALL KA +0x8396 0x30F6 # KATAKANA LETTER SMALL KE +0x839F 0x0391 # GREEK CAPITAL LETTER ALPHA +0x83A0 0x0392 # GREEK CAPITAL LETTER BETA +0x83A1 0x0393 # GREEK CAPITAL LETTER GAMMA +0x83A2 0x0394 # GREEK CAPITAL LETTER DELTA +0x83A3 0x0395 # GREEK CAPITAL LETTER EPSILON +0x83A4 0x0396 # GREEK CAPITAL LETTER ZETA +0x83A5 0x0397 # GREEK CAPITAL LETTER ETA +0x83A6 0x0398 # GREEK CAPITAL LETTER THETA +0x83A7 0x0399 # GREEK CAPITAL LETTER IOTA +0x83A8 0x039A # GREEK CAPITAL LETTER KAPPA +0x83A9 0x039B # GREEK CAPITAL LETTER LAMDA +0x83AA 0x039C # GREEK CAPITAL LETTER MU +0x83AB 0x039D # GREEK CAPITAL LETTER NU +0x83AC 0x039E # GREEK CAPITAL LETTER XI +0x83AD 0x039F # GREEK CAPITAL LETTER OMICRON +0x83AE 0x03A0 # GREEK CAPITAL LETTER PI +0x83AF 0x03A1 # GREEK CAPITAL LETTER RHO +0x83B0 0x03A3 # GREEK CAPITAL LETTER SIGMA +0x83B1 0x03A4 # GREEK CAPITAL LETTER TAU +0x83B2 0x03A5 # GREEK CAPITAL LETTER UPSILON +0x83B3 0x03A6 # GREEK CAPITAL LETTER PHI +0x83B4 0x03A7 # GREEK CAPITAL LETTER CHI +0x83B5 0x03A8 # GREEK CAPITAL LETTER PSI +0x83B6 0x03A9 # GREEK CAPITAL LETTER OMEGA +0x83BF 0x03B1 # GREEK SMALL LETTER ALPHA +0x83C0 0x03B2 # GREEK SMALL LETTER BETA +0x83C1 0x03B3 # GREEK SMALL LETTER GAMMA +0x83C2 0x03B4 # GREEK SMALL LETTER DELTA +0x83C3 0x03B5 # GREEK SMALL LETTER EPSILON +0x83C4 0x03B6 # GREEK SMALL LETTER ZETA +0x83C5 0x03B7 # GREEK SMALL LETTER ETA +0x83C6 0x03B8 # GREEK SMALL LETTER THETA +0x83C7 0x03B9 # GREEK SMALL LETTER IOTA +0x83C8 0x03BA # GREEK SMALL LETTER KAPPA +0x83C9 0x03BB # GREEK SMALL LETTER LAMDA +0x83CA 0x03BC # GREEK SMALL LETTER MU +0x83CB 0x03BD # GREEK SMALL LETTER NU +0x83CC 0x03BE # GREEK SMALL LETTER XI +0x83CD 0x03BF # GREEK SMALL LETTER OMICRON +0x83CE 0x03C0 # GREEK SMALL LETTER PI +0x83CF 0x03C1 # GREEK SMALL LETTER RHO +0x83D0 0x03C3 # GREEK SMALL LETTER SIGMA +0x83D1 0x03C4 # GREEK SMALL LETTER TAU +0x83D2 0x03C5 # GREEK SMALL LETTER UPSILON +0x83D3 0x03C6 # GREEK SMALL LETTER PHI +0x83D4 0x03C7 # GREEK SMALL LETTER CHI +0x83D5 0x03C8 # GREEK SMALL LETTER PSI +0x83D6 0x03C9 # GREEK SMALL LETTER OMEGA +0x8440 0x0410 # CYRILLIC CAPITAL LETTER A +0x8441 0x0411 # CYRILLIC CAPITAL LETTER BE +0x8442 0x0412 # CYRILLIC CAPITAL LETTER VE +0x8443 0x0413 # CYRILLIC CAPITAL LETTER GHE +0x8444 0x0414 # CYRILLIC CAPITAL LETTER DE +0x8445 0x0415 # CYRILLIC CAPITAL LETTER IE +0x8446 0x0401 # CYRILLIC CAPITAL LETTER IO +0x8447 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0x8448 0x0417 # CYRILLIC CAPITAL LETTER ZE +0x8449 0x0418 # CYRILLIC CAPITAL LETTER I +0x844A 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0x844B 0x041A # CYRILLIC CAPITAL LETTER KA +0x844C 0x041B # CYRILLIC CAPITAL LETTER EL +0x844D 0x041C # CYRILLIC CAPITAL LETTER EM +0x844E 0x041D # CYRILLIC CAPITAL LETTER EN +0x844F 0x041E # CYRILLIC CAPITAL LETTER O +0x8450 0x041F # CYRILLIC CAPITAL LETTER PE +0x8451 0x0420 # CYRILLIC CAPITAL LETTER ER +0x8452 0x0421 # CYRILLIC CAPITAL LETTER ES +0x8453 0x0422 # CYRILLIC CAPITAL LETTER TE +0x8454 0x0423 # CYRILLIC CAPITAL LETTER U +0x8455 0x0424 # CYRILLIC CAPITAL LETTER EF +0x8456 0x0425 # CYRILLIC CAPITAL LETTER HA +0x8457 0x0426 # CYRILLIC CAPITAL LETTER TSE +0x8458 0x0427 # CYRILLIC CAPITAL LETTER CHE +0x8459 0x0428 # CYRILLIC CAPITAL LETTER SHA +0x845A 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0x845B 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x845C 0x042B # CYRILLIC CAPITAL LETTER YERU +0x845D 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x845E 0x042D # CYRILLIC CAPITAL LETTER E +0x845F 0x042E # CYRILLIC CAPITAL LETTER YU +0x8460 0x042F # CYRILLIC CAPITAL LETTER YA +0x8470 0x0430 # CYRILLIC SMALL LETTER A +0x8471 0x0431 # CYRILLIC SMALL LETTER BE +0x8472 0x0432 # CYRILLIC SMALL LETTER VE +0x8473 0x0433 # CYRILLIC SMALL LETTER GHE +0x8474 0x0434 # CYRILLIC SMALL LETTER DE +0x8475 0x0435 # CYRILLIC SMALL LETTER IE +0x8476 0x0451 # CYRILLIC SMALL LETTER IO +0x8477 0x0436 # CYRILLIC SMALL LETTER ZHE +0x8478 0x0437 # CYRILLIC SMALL LETTER ZE +0x8479 0x0438 # CYRILLIC SMALL LETTER I +0x847A 0x0439 # CYRILLIC SMALL LETTER SHORT I +0x847B 0x043A # CYRILLIC SMALL LETTER KA +0x847C 0x043B # CYRILLIC SMALL LETTER EL +0x847D 0x043C # CYRILLIC SMALL LETTER EM +0x847E 0x043D # CYRILLIC SMALL LETTER EN +0x8480 0x043E # CYRILLIC SMALL LETTER O +0x8481 0x043F # CYRILLIC SMALL LETTER PE +0x8482 0x0440 # CYRILLIC SMALL LETTER ER +0x8483 0x0441 # CYRILLIC SMALL LETTER ES +0x8484 0x0442 # CYRILLIC SMALL LETTER TE +0x8485 0x0443 # CYRILLIC SMALL LETTER U +0x8486 0x0444 # CYRILLIC SMALL LETTER EF +0x8487 0x0445 # CYRILLIC SMALL LETTER HA +0x8488 0x0446 # CYRILLIC SMALL LETTER TSE +0x8489 0x0447 # CYRILLIC SMALL LETTER CHE +0x848A 0x0448 # CYRILLIC SMALL LETTER SHA +0x848B 0x0449 # CYRILLIC SMALL LETTER SHCHA +0x848C 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0x848D 0x044B # CYRILLIC SMALL LETTER YERU +0x848E 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0x848F 0x044D # CYRILLIC SMALL LETTER E +0x8490 0x044E # CYRILLIC SMALL LETTER YU +0x8491 0x044F # CYRILLIC SMALL LETTER YA +0x849F 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL +0x84A0 0x2502 # BOX DRAWINGS LIGHT VERTICAL +0x84A1 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT +0x84A2 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT +0x84A3 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT +0x84A4 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT +0x84A5 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0x84A6 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0x84A7 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT +0x84A8 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL +0x84A9 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0x84AA 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL +0x84AB 0x2503 # BOX DRAWINGS HEAVY VERTICAL +0x84AC 0x250F # BOX DRAWINGS HEAVY DOWN AND RIGHT +0x84AD 0x2513 # BOX DRAWINGS HEAVY DOWN AND LEFT +0x84AE 0x251B # BOX DRAWINGS HEAVY UP AND LEFT +0x84AF 0x2517 # BOX DRAWINGS HEAVY UP AND RIGHT +0x84B0 0x2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT +0x84B1 0x2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +0x84B2 0x252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT +0x84B3 0x253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL +0x84B4 0x254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +0x84B5 0x2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +0x84B6 0x252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +0x84B7 0x2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +0x84B8 0x2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +0x84B9 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +0x84BA 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +0x84BB 0x2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +0x84BC 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +0x84BD 0x2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +0x84BE 0x2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT +0x889F 0x4E9C # <CJK> +0x88A0 0x5516 # <CJK> +0x88A1 0x5A03 # <CJK> +0x88A2 0x963F # <CJK> +0x88A3 0x54C0 # <CJK> +0x88A4 0x611B # <CJK> +0x88A5 0x6328 # <CJK> +0x88A6 0x59F6 # <CJK> +0x88A7 0x9022 # <CJK> +0x88A8 0x8475 # <CJK> +0x88A9 0x831C # <CJK> +0x88AA 0x7A50 # <CJK> +0x88AB 0x60AA # <CJK> +0x88AC 0x63E1 # <CJK> +0x88AD 0x6E25 # <CJK> +0x88AE 0x65ED # <CJK> +0x88AF 0x8466 # <CJK> +0x88B0 0x82A6 # <CJK> +0x88B1 0x9BF5 # <CJK> +0x88B2 0x6893 # <CJK> +0x88B3 0x5727 # <CJK> +0x88B4 0x65A1 # <CJK> +0x88B5 0x6271 # <CJK> +0x88B6 0x5B9B # <CJK> +0x88B7 0x59D0 # <CJK> +0x88B8 0x867B # <CJK> +0x88B9 0x98F4 # <CJK> +0x88BA 0x7D62 # <CJK> +0x88BB 0x7DBE # <CJK> +0x88BC 0x9B8E # <CJK> +0x88BD 0x6216 # <CJK> +0x88BE 0x7C9F # <CJK> +0x88BF 0x88B7 # <CJK> +0x88C0 0x5B89 # <CJK> +0x88C1 0x5EB5 # <CJK> +0x88C2 0x6309 # <CJK> +0x88C3 0x6697 # <CJK> +0x88C4 0x6848 # <CJK> +0x88C5 0x95C7 # <CJK> +0x88C6 0x978D # <CJK> +0x88C7 0x674F # <CJK> +0x88C8 0x4EE5 # <CJK> +0x88C9 0x4F0A # <CJK> +0x88CA 0x4F4D # <CJK> +0x88CB 0x4F9D # <CJK> +0x88CC 0x5049 # <CJK> +0x88CD 0x56F2 # <CJK> +0x88CE 0x5937 # <CJK> +0x88CF 0x59D4 # <CJK> +0x88D0 0x5A01 # <CJK> +0x88D1 0x5C09 # <CJK> +0x88D2 0x60DF # <CJK> +0x88D3 0x610F # <CJK> +0x88D4 0x6170 # <CJK> +0x88D5 0x6613 # <CJK> +0x88D6 0x6905 # <CJK> +0x88D7 0x70BA # <CJK> +0x88D8 0x754F # <CJK> +0x88D9 0x7570 # <CJK> +0x88DA 0x79FB # <CJK> +0x88DB 0x7DAD # <CJK> +0x88DC 0x7DEF # <CJK> +0x88DD 0x80C3 # <CJK> +0x88DE 0x840E # <CJK> +0x88DF 0x8863 # <CJK> +0x88E0 0x8B02 # <CJK> +0x88E1 0x9055 # <CJK> +0x88E2 0x907A # <CJK> +0x88E3 0x533B # <CJK> +0x88E4 0x4E95 # <CJK> +0x88E5 0x4EA5 # <CJK> +0x88E6 0x57DF # <CJK> +0x88E7 0x80B2 # <CJK> +0x88E8 0x90C1 # <CJK> +0x88E9 0x78EF # <CJK> +0x88EA 0x4E00 # <CJK> +0x88EB 0x58F1 # <CJK> +0x88EC 0x6EA2 # <CJK> +0x88ED 0x9038 # <CJK> +0x88EE 0x7A32 # <CJK> +0x88EF 0x8328 # <CJK> +0x88F0 0x828B # <CJK> +0x88F1 0x9C2F # <CJK> +0x88F2 0x5141 # <CJK> +0x88F3 0x5370 # <CJK> +0x88F4 0x54BD # <CJK> +0x88F5 0x54E1 # <CJK> +0x88F6 0x56E0 # <CJK> +0x88F7 0x59FB # <CJK> +0x88F8 0x5F15 # <CJK> +0x88F9 0x98F2 # <CJK> +0x88FA 0x6DEB # <CJK> +0x88FB 0x80E4 # <CJK> +0x88FC 0x852D # <CJK> +0x8940 0x9662 # <CJK> +0x8941 0x9670 # <CJK> +0x8942 0x96A0 # <CJK> +0x8943 0x97FB # <CJK> +0x8944 0x540B # <CJK> +0x8945 0x53F3 # <CJK> +0x8946 0x5B87 # <CJK> +0x8947 0x70CF # <CJK> +0x8948 0x7FBD # <CJK> +0x8949 0x8FC2 # <CJK> +0x894A 0x96E8 # <CJK> +0x894B 0x536F # <CJK> +0x894C 0x9D5C # <CJK> +0x894D 0x7ABA # <CJK> +0x894E 0x4E11 # <CJK> +0x894F 0x7893 # <CJK> +0x8950 0x81FC # <CJK> +0x8951 0x6E26 # <CJK> +0x8952 0x5618 # <CJK> +0x8953 0x5504 # <CJK> +0x8954 0x6B1D # <CJK> +0x8955 0x851A # <CJK> +0x8956 0x9C3B # <CJK> +0x8957 0x59E5 # <CJK> +0x8958 0x53A9 # <CJK> +0x8959 0x6D66 # <CJK> +0x895A 0x74DC # <CJK> +0x895B 0x958F # <CJK> +0x895C 0x5642 # <CJK> +0x895D 0x4E91 # <CJK> +0x895E 0x904B # <CJK> +0x895F 0x96F2 # <CJK> +0x8960 0x834F # <CJK> +0x8961 0x990C # <CJK> +0x8962 0x53E1 # <CJK> +0x8963 0x55B6 # <CJK> +0x8964 0x5B30 # <CJK> +0x8965 0x5F71 # <CJK> +0x8966 0x6620 # <CJK> +0x8967 0x66F3 # <CJK> +0x8968 0x6804 # <CJK> +0x8969 0x6C38 # <CJK> +0x896A 0x6CF3 # <CJK> +0x896B 0x6D29 # <CJK> +0x896C 0x745B # <CJK> +0x896D 0x76C8 # <CJK> +0x896E 0x7A4E # <CJK> +0x896F 0x9834 # <CJK> +0x8970 0x82F1 # <CJK> +0x8971 0x885B # <CJK> +0x8972 0x8A60 # <CJK> +0x8973 0x92ED # <CJK> +0x8974 0x6DB2 # <CJK> +0x8975 0x75AB # <CJK> +0x8976 0x76CA # <CJK> +0x8977 0x99C5 # <CJK> +0x8978 0x60A6 # <CJK> +0x8979 0x8B01 # <CJK> +0x897A 0x8D8A # <CJK> +0x897B 0x95B2 # <CJK> +0x897C 0x698E # <CJK> +0x897D 0x53AD # <CJK> +0x897E 0x5186 # <CJK> +0x8980 0x5712 # <CJK> +0x8981 0x5830 # <CJK> +0x8982 0x5944 # <CJK> +0x8983 0x5BB4 # <CJK> +0x8984 0x5EF6 # <CJK> +0x8985 0x6028 # <CJK> +0x8986 0x63A9 # <CJK> +0x8987 0x63F4 # <CJK> +0x8988 0x6CBF # <CJK> +0x8989 0x6F14 # <CJK> +0x898A 0x708E # <CJK> +0x898B 0x7114 # <CJK> +0x898C 0x7159 # <CJK> +0x898D 0x71D5 # <CJK> +0x898E 0x733F # <CJK> +0x898F 0x7E01 # <CJK> +0x8990 0x8276 # <CJK> +0x8991 0x82D1 # <CJK> +0x8992 0x8597 # <CJK> +0x8993 0x9060 # <CJK> +0x8994 0x925B # <CJK> +0x8995 0x9D1B # <CJK> +0x8996 0x5869 # <CJK> +0x8997 0x65BC # <CJK> +0x8998 0x6C5A # <CJK> +0x8999 0x7525 # <CJK> +0x899A 0x51F9 # <CJK> +0x899B 0x592E # <CJK> +0x899C 0x5965 # <CJK> +0x899D 0x5F80 # <CJK> +0x899E 0x5FDC # <CJK> +0x899F 0x62BC # <CJK> +0x89A0 0x65FA # <CJK> +0x89A1 0x6A2A # <CJK> +0x89A2 0x6B27 # <CJK> +0x89A3 0x6BB4 # <CJK> +0x89A4 0x738B # <CJK> +0x89A5 0x7FC1 # <CJK> +0x89A6 0x8956 # <CJK> +0x89A7 0x9D2C # <CJK> +0x89A8 0x9D0E # <CJK> +0x89A9 0x9EC4 # <CJK> +0x89AA 0x5CA1 # <CJK> +0x89AB 0x6C96 # <CJK> +0x89AC 0x837B # <CJK> +0x89AD 0x5104 # <CJK> +0x89AE 0x5C4B # <CJK> +0x89AF 0x61B6 # <CJK> +0x89B0 0x81C6 # <CJK> +0x89B1 0x6876 # <CJK> +0x89B2 0x7261 # <CJK> +0x89B3 0x4E59 # <CJK> +0x89B4 0x4FFA # <CJK> +0x89B5 0x5378 # <CJK> +0x89B6 0x6069 # <CJK> +0x89B7 0x6E29 # <CJK> +0x89B8 0x7A4F # <CJK> +0x89B9 0x97F3 # <CJK> +0x89BA 0x4E0B # <CJK> +0x89BB 0x5316 # <CJK> +0x89BC 0x4EEE # <CJK> +0x89BD 0x4F55 # <CJK> +0x89BE 0x4F3D # <CJK> +0x89BF 0x4FA1 # <CJK> +0x89C0 0x4F73 # <CJK> +0x89C1 0x52A0 # <CJK> +0x89C2 0x53EF # <CJK> +0x89C3 0x5609 # <CJK> +0x89C4 0x590F # <CJK> +0x89C5 0x5AC1 # <CJK> +0x89C6 0x5BB6 # <CJK> +0x89C7 0x5BE1 # <CJK> +0x89C8 0x79D1 # <CJK> +0x89C9 0x6687 # <CJK> +0x89CA 0x679C # <CJK> +0x89CB 0x67B6 # <CJK> +0x89CC 0x6B4C # <CJK> +0x89CD 0x6CB3 # <CJK> +0x89CE 0x706B # <CJK> +0x89CF 0x73C2 # <CJK> +0x89D0 0x798D # <CJK> +0x89D1 0x79BE # <CJK> +0x89D2 0x7A3C # <CJK> +0x89D3 0x7B87 # <CJK> +0x89D4 0x82B1 # <CJK> +0x89D5 0x82DB # <CJK> +0x89D6 0x8304 # <CJK> +0x89D7 0x8377 # <CJK> +0x89D8 0x83EF # <CJK> +0x89D9 0x83D3 # <CJK> +0x89DA 0x8766 # <CJK> +0x89DB 0x8AB2 # <CJK> +0x89DC 0x5629 # <CJK> +0x89DD 0x8CA8 # <CJK> +0x89DE 0x8FE6 # <CJK> +0x89DF 0x904E # <CJK> +0x89E0 0x971E # <CJK> +0x89E1 0x868A # <CJK> +0x89E2 0x4FC4 # <CJK> +0x89E3 0x5CE8 # <CJK> +0x89E4 0x6211 # <CJK> +0x89E5 0x7259 # <CJK> +0x89E6 0x753B # <CJK> +0x89E7 0x81E5 # <CJK> +0x89E8 0x82BD # <CJK> +0x89E9 0x86FE # <CJK> +0x89EA 0x8CC0 # <CJK> +0x89EB 0x96C5 # <CJK> +0x89EC 0x9913 # <CJK> +0x89ED 0x99D5 # <CJK> +0x89EE 0x4ECB # <CJK> +0x89EF 0x4F1A # <CJK> +0x89F0 0x89E3 # <CJK> +0x89F1 0x56DE # <CJK> +0x89F2 0x584A # <CJK> +0x89F3 0x58CA # <CJK> +0x89F4 0x5EFB # <CJK> +0x89F5 0x5FEB # <CJK> +0x89F6 0x602A # <CJK> +0x89F7 0x6094 # <CJK> +0x89F8 0x6062 # <CJK> +0x89F9 0x61D0 # <CJK> +0x89FA 0x6212 # <CJK> +0x89FB 0x62D0 # <CJK> +0x89FC 0x6539 # <CJK> +0x8A40 0x9B41 # <CJK> +0x8A41 0x6666 # <CJK> +0x8A42 0x68B0 # <CJK> +0x8A43 0x6D77 # <CJK> +0x8A44 0x7070 # <CJK> +0x8A45 0x754C # <CJK> +0x8A46 0x7686 # <CJK> +0x8A47 0x7D75 # <CJK> +0x8A48 0x82A5 # <CJK> +0x8A49 0x87F9 # <CJK> +0x8A4A 0x958B # <CJK> +0x8A4B 0x968E # <CJK> +0x8A4C 0x8C9D # <CJK> +0x8A4D 0x51F1 # <CJK> +0x8A4E 0x52BE # <CJK> +0x8A4F 0x5916 # <CJK> +0x8A50 0x54B3 # <CJK> +0x8A51 0x5BB3 # <CJK> +0x8A52 0x5D16 # <CJK> +0x8A53 0x6168 # <CJK> +0x8A54 0x6982 # <CJK> +0x8A55 0x6DAF # <CJK> +0x8A56 0x788D # <CJK> +0x8A57 0x84CB # <CJK> +0x8A58 0x8857 # <CJK> +0x8A59 0x8A72 # <CJK> +0x8A5A 0x93A7 # <CJK> +0x8A5B 0x9AB8 # <CJK> +0x8A5C 0x6D6C # <CJK> +0x8A5D 0x99A8 # <CJK> +0x8A5E 0x86D9 # <CJK> +0x8A5F 0x57A3 # <CJK> +0x8A60 0x67FF # <CJK> +0x8A61 0x86CE # <CJK> +0x8A62 0x920E # <CJK> +0x8A63 0x5283 # <CJK> +0x8A64 0x5687 # <CJK> +0x8A65 0x5404 # <CJK> +0x8A66 0x5ED3 # <CJK> +0x8A67 0x62E1 # <CJK> +0x8A68 0x64B9 # <CJK> +0x8A69 0x683C # <CJK> +0x8A6A 0x6838 # <CJK> +0x8A6B 0x6BBB # <CJK> +0x8A6C 0x7372 # <CJK> +0x8A6D 0x78BA # <CJK> +0x8A6E 0x7A6B # <CJK> +0x8A6F 0x899A # <CJK> +0x8A70 0x89D2 # <CJK> +0x8A71 0x8D6B # <CJK> +0x8A72 0x8F03 # <CJK> +0x8A73 0x90ED # <CJK> +0x8A74 0x95A3 # <CJK> +0x8A75 0x9694 # <CJK> +0x8A76 0x9769 # <CJK> +0x8A77 0x5B66 # <CJK> +0x8A78 0x5CB3 # <CJK> +0x8A79 0x697D # <CJK> +0x8A7A 0x984D # <CJK> +0x8A7B 0x984E # <CJK> +0x8A7C 0x639B # <CJK> +0x8A7D 0x7B20 # <CJK> +0x8A7E 0x6A2B # <CJK> +0x8A80 0x6A7F # <CJK> +0x8A81 0x68B6 # <CJK> +0x8A82 0x9C0D # <CJK> +0x8A83 0x6F5F # <CJK> +0x8A84 0x5272 # <CJK> +0x8A85 0x559D # <CJK> +0x8A86 0x6070 # <CJK> +0x8A87 0x62EC # <CJK> +0x8A88 0x6D3B # <CJK> +0x8A89 0x6E07 # <CJK> +0x8A8A 0x6ED1 # <CJK> +0x8A8B 0x845B # <CJK> +0x8A8C 0x8910 # <CJK> +0x8A8D 0x8F44 # <CJK> +0x8A8E 0x4E14 # <CJK> +0x8A8F 0x9C39 # <CJK> +0x8A90 0x53F6 # <CJK> +0x8A91 0x691B # <CJK> +0x8A92 0x6A3A # <CJK> +0x8A93 0x9784 # <CJK> +0x8A94 0x682A # <CJK> +0x8A95 0x515C # <CJK> +0x8A96 0x7AC3 # <CJK> +0x8A97 0x84B2 # <CJK> +0x8A98 0x91DC # <CJK> +0x8A99 0x938C # <CJK> +0x8A9A 0x565B # <CJK> +0x8A9B 0x9D28 # <CJK> +0x8A9C 0x6822 # <CJK> +0x8A9D 0x8305 # <CJK> +0x8A9E 0x8431 # <CJK> +0x8A9F 0x7CA5 # <CJK> +0x8AA0 0x5208 # <CJK> +0x8AA1 0x82C5 # <CJK> +0x8AA2 0x74E6 # <CJK> +0x8AA3 0x4E7E # <CJK> +0x8AA4 0x4F83 # <CJK> +0x8AA5 0x51A0 # <CJK> +0x8AA6 0x5BD2 # <CJK> +0x8AA7 0x520A # <CJK> +0x8AA8 0x52D8 # <CJK> +0x8AA9 0x52E7 # <CJK> +0x8AAA 0x5DFB # <CJK> +0x8AAB 0x559A # <CJK> +0x8AAC 0x582A # <CJK> +0x8AAD 0x59E6 # <CJK> +0x8AAE 0x5B8C # <CJK> +0x8AAF 0x5B98 # <CJK> +0x8AB0 0x5BDB # <CJK> +0x8AB1 0x5E72 # <CJK> +0x8AB2 0x5E79 # <CJK> +0x8AB3 0x60A3 # <CJK> +0x8AB4 0x611F # <CJK> +0x8AB5 0x6163 # <CJK> +0x8AB6 0x61BE # <CJK> +0x8AB7 0x63DB # <CJK> +0x8AB8 0x6562 # <CJK> +0x8AB9 0x67D1 # <CJK> +0x8ABA 0x6853 # <CJK> +0x8ABB 0x68FA # <CJK> +0x8ABC 0x6B3E # <CJK> +0x8ABD 0x6B53 # <CJK> +0x8ABE 0x6C57 # <CJK> +0x8ABF 0x6F22 # <CJK> +0x8AC0 0x6F97 # <CJK> +0x8AC1 0x6F45 # <CJK> +0x8AC2 0x74B0 # <CJK> +0x8AC3 0x7518 # <CJK> +0x8AC4 0x76E3 # <CJK> +0x8AC5 0x770B # <CJK> +0x8AC6 0x7AFF # <CJK> +0x8AC7 0x7BA1 # <CJK> +0x8AC8 0x7C21 # <CJK> +0x8AC9 0x7DE9 # <CJK> +0x8ACA 0x7F36 # <CJK> +0x8ACB 0x7FF0 # <CJK> +0x8ACC 0x809D # <CJK> +0x8ACD 0x8266 # <CJK> +0x8ACE 0x839E # <CJK> +0x8ACF 0x89B3 # <CJK> +0x8AD0 0x8ACC # <CJK> +0x8AD1 0x8CAB # <CJK> +0x8AD2 0x9084 # <CJK> +0x8AD3 0x9451 # <CJK> +0x8AD4 0x9593 # <CJK> +0x8AD5 0x9591 # <CJK> +0x8AD6 0x95A2 # <CJK> +0x8AD7 0x9665 # <CJK> +0x8AD8 0x97D3 # <CJK> +0x8AD9 0x9928 # <CJK> +0x8ADA 0x8218 # <CJK> +0x8ADB 0x4E38 # <CJK> +0x8ADC 0x542B # <CJK> +0x8ADD 0x5CB8 # <CJK> +0x8ADE 0x5DCC # <CJK> +0x8ADF 0x73A9 # <CJK> +0x8AE0 0x764C # <CJK> +0x8AE1 0x773C # <CJK> +0x8AE2 0x5CA9 # <CJK> +0x8AE3 0x7FEB # <CJK> +0x8AE4 0x8D0B # <CJK> +0x8AE5 0x96C1 # <CJK> +0x8AE6 0x9811 # <CJK> +0x8AE7 0x9854 # <CJK> +0x8AE8 0x9858 # <CJK> +0x8AE9 0x4F01 # <CJK> +0x8AEA 0x4F0E # <CJK> +0x8AEB 0x5371 # <CJK> +0x8AEC 0x559C # <CJK> +0x8AED 0x5668 # <CJK> +0x8AEE 0x57FA # <CJK> +0x8AEF 0x5947 # <CJK> +0x8AF0 0x5B09 # <CJK> +0x8AF1 0x5BC4 # <CJK> +0x8AF2 0x5C90 # <CJK> +0x8AF3 0x5E0C # <CJK> +0x8AF4 0x5E7E # <CJK> +0x8AF5 0x5FCC # <CJK> +0x8AF6 0x63EE # <CJK> +0x8AF7 0x673A # <CJK> +0x8AF8 0x65D7 # <CJK> +0x8AF9 0x65E2 # <CJK> +0x8AFA 0x671F # <CJK> +0x8AFB 0x68CB # <CJK> +0x8AFC 0x68C4 # <CJK> +0x8B40 0x6A5F # <CJK> +0x8B41 0x5E30 # <CJK> +0x8B42 0x6BC5 # <CJK> +0x8B43 0x6C17 # <CJK> +0x8B44 0x6C7D # <CJK> +0x8B45 0x757F # <CJK> +0x8B46 0x7948 # <CJK> +0x8B47 0x5B63 # <CJK> +0x8B48 0x7A00 # <CJK> +0x8B49 0x7D00 # <CJK> +0x8B4A 0x5FBD # <CJK> +0x8B4B 0x898F # <CJK> +0x8B4C 0x8A18 # <CJK> +0x8B4D 0x8CB4 # <CJK> +0x8B4E 0x8D77 # <CJK> +0x8B4F 0x8ECC # <CJK> +0x8B50 0x8F1D # <CJK> +0x8B51 0x98E2 # <CJK> +0x8B52 0x9A0E # <CJK> +0x8B53 0x9B3C # <CJK> +0x8B54 0x4E80 # <CJK> +0x8B55 0x507D # <CJK> +0x8B56 0x5100 # <CJK> +0x8B57 0x5993 # <CJK> +0x8B58 0x5B9C # <CJK> +0x8B59 0x622F # <CJK> +0x8B5A 0x6280 # <CJK> +0x8B5B 0x64EC # <CJK> +0x8B5C 0x6B3A # <CJK> +0x8B5D 0x72A0 # <CJK> +0x8B5E 0x7591 # <CJK> +0x8B5F 0x7947 # <CJK> +0x8B60 0x7FA9 # <CJK> +0x8B61 0x87FB # <CJK> +0x8B62 0x8ABC # <CJK> +0x8B63 0x8B70 # <CJK> +0x8B64 0x63AC # <CJK> +0x8B65 0x83CA # <CJK> +0x8B66 0x97A0 # <CJK> +0x8B67 0x5409 # <CJK> +0x8B68 0x5403 # <CJK> +0x8B69 0x55AB # <CJK> +0x8B6A 0x6854 # <CJK> +0x8B6B 0x6A58 # <CJK> +0x8B6C 0x8A70 # <CJK> +0x8B6D 0x7827 # <CJK> +0x8B6E 0x6775 # <CJK> +0x8B6F 0x9ECD # <CJK> +0x8B70 0x5374 # <CJK> +0x8B71 0x5BA2 # <CJK> +0x8B72 0x811A # <CJK> +0x8B73 0x8650 # <CJK> +0x8B74 0x9006 # <CJK> +0x8B75 0x4E18 # <CJK> +0x8B76 0x4E45 # <CJK> +0x8B77 0x4EC7 # <CJK> +0x8B78 0x4F11 # <CJK> +0x8B79 0x53CA # <CJK> +0x8B7A 0x5438 # <CJK> +0x8B7B 0x5BAE # <CJK> +0x8B7C 0x5F13 # <CJK> +0x8B7D 0x6025 # <CJK> +0x8B7E 0x6551 # <CJK> +0x8B80 0x673D # <CJK> +0x8B81 0x6C42 # <CJK> +0x8B82 0x6C72 # <CJK> +0x8B83 0x6CE3 # <CJK> +0x8B84 0x7078 # <CJK> +0x8B85 0x7403 # <CJK> +0x8B86 0x7A76 # <CJK> +0x8B87 0x7AAE # <CJK> +0x8B88 0x7B08 # <CJK> +0x8B89 0x7D1A # <CJK> +0x8B8A 0x7CFE # <CJK> +0x8B8B 0x7D66 # <CJK> +0x8B8C 0x65E7 # <CJK> +0x8B8D 0x725B # <CJK> +0x8B8E 0x53BB # <CJK> +0x8B8F 0x5C45 # <CJK> +0x8B90 0x5DE8 # <CJK> +0x8B91 0x62D2 # <CJK> +0x8B92 0x62E0 # <CJK> +0x8B93 0x6319 # <CJK> +0x8B94 0x6E20 # <CJK> +0x8B95 0x865A # <CJK> +0x8B96 0x8A31 # <CJK> +0x8B97 0x8DDD # <CJK> +0x8B98 0x92F8 # <CJK> +0x8B99 0x6F01 # <CJK> +0x8B9A 0x79A6 # <CJK> +0x8B9B 0x9B5A # <CJK> +0x8B9C 0x4EA8 # <CJK> +0x8B9D 0x4EAB # <CJK> +0x8B9E 0x4EAC # <CJK> +0x8B9F 0x4F9B # <CJK> +0x8BA0 0x4FA0 # <CJK> +0x8BA1 0x50D1 # <CJK> +0x8BA2 0x5147 # <CJK> +0x8BA3 0x7AF6 # <CJK> +0x8BA4 0x5171 # <CJK> +0x8BA5 0x51F6 # <CJK> +0x8BA6 0x5354 # <CJK> +0x8BA7 0x5321 # <CJK> +0x8BA8 0x537F # <CJK> +0x8BA9 0x53EB # <CJK> +0x8BAA 0x55AC # <CJK> +0x8BAB 0x5883 # <CJK> +0x8BAC 0x5CE1 # <CJK> +0x8BAD 0x5F37 # <CJK> +0x8BAE 0x5F4A # <CJK> +0x8BAF 0x602F # <CJK> +0x8BB0 0x6050 # <CJK> +0x8BB1 0x606D # <CJK> +0x8BB2 0x631F # <CJK> +0x8BB3 0x6559 # <CJK> +0x8BB4 0x6A4B # <CJK> +0x8BB5 0x6CC1 # <CJK> +0x8BB6 0x72C2 # <CJK> +0x8BB7 0x72ED # <CJK> +0x8BB8 0x77EF # <CJK> +0x8BB9 0x80F8 # <CJK> +0x8BBA 0x8105 # <CJK> +0x8BBB 0x8208 # <CJK> +0x8BBC 0x854E # <CJK> +0x8BBD 0x90F7 # <CJK> +0x8BBE 0x93E1 # <CJK> +0x8BBF 0x97FF # <CJK> +0x8BC0 0x9957 # <CJK> +0x8BC1 0x9A5A # <CJK> +0x8BC2 0x4EF0 # <CJK> +0x8BC3 0x51DD # <CJK> +0x8BC4 0x5C2D # <CJK> +0x8BC5 0x6681 # <CJK> +0x8BC6 0x696D # <CJK> +0x8BC7 0x5C40 # <CJK> +0x8BC8 0x66F2 # <CJK> +0x8BC9 0x6975 # <CJK> +0x8BCA 0x7389 # <CJK> +0x8BCB 0x6850 # <CJK> +0x8BCC 0x7C81 # <CJK> +0x8BCD 0x50C5 # <CJK> +0x8BCE 0x52E4 # <CJK> +0x8BCF 0x5747 # <CJK> +0x8BD0 0x5DFE # <CJK> +0x8BD1 0x9326 # <CJK> +0x8BD2 0x65A4 # <CJK> +0x8BD3 0x6B23 # <CJK> +0x8BD4 0x6B3D # <CJK> +0x8BD5 0x7434 # <CJK> +0x8BD6 0x7981 # <CJK> +0x8BD7 0x79BD # <CJK> +0x8BD8 0x7B4B # <CJK> +0x8BD9 0x7DCA # <CJK> +0x8BDA 0x82B9 # <CJK> +0x8BDB 0x83CC # <CJK> +0x8BDC 0x887F # <CJK> +0x8BDD 0x895F # <CJK> +0x8BDE 0x8B39 # <CJK> +0x8BDF 0x8FD1 # <CJK> +0x8BE0 0x91D1 # <CJK> +0x8BE1 0x541F # <CJK> +0x8BE2 0x9280 # <CJK> +0x8BE3 0x4E5D # <CJK> +0x8BE4 0x5036 # <CJK> +0x8BE5 0x53E5 # <CJK> +0x8BE6 0x533A # <CJK> +0x8BE7 0x72D7 # <CJK> +0x8BE8 0x7396 # <CJK> +0x8BE9 0x77E9 # <CJK> +0x8BEA 0x82E6 # <CJK> +0x8BEB 0x8EAF # <CJK> +0x8BEC 0x99C6 # <CJK> +0x8BED 0x99C8 # <CJK> +0x8BEE 0x99D2 # <CJK> +0x8BEF 0x5177 # <CJK> +0x8BF0 0x611A # <CJK> +0x8BF1 0x865E # <CJK> +0x8BF2 0x55B0 # <CJK> +0x8BF3 0x7A7A # <CJK> +0x8BF4 0x5076 # <CJK> +0x8BF5 0x5BD3 # <CJK> +0x8BF6 0x9047 # <CJK> +0x8BF7 0x9685 # <CJK> +0x8BF8 0x4E32 # <CJK> +0x8BF9 0x6ADB # <CJK> +0x8BFA 0x91E7 # <CJK> +0x8BFB 0x5C51 # <CJK> +0x8BFC 0x5C48 # <CJK> +0x8C40 0x6398 # <CJK> +0x8C41 0x7A9F # <CJK> +0x8C42 0x6C93 # <CJK> +0x8C43 0x9774 # <CJK> +0x8C44 0x8F61 # <CJK> +0x8C45 0x7AAA # <CJK> +0x8C46 0x718A # <CJK> +0x8C47 0x9688 # <CJK> +0x8C48 0x7C82 # <CJK> +0x8C49 0x6817 # <CJK> +0x8C4A 0x7E70 # <CJK> +0x8C4B 0x6851 # <CJK> +0x8C4C 0x936C # <CJK> +0x8C4D 0x52F2 # <CJK> +0x8C4E 0x541B # <CJK> +0x8C4F 0x85AB # <CJK> +0x8C50 0x8A13 # <CJK> +0x8C51 0x7FA4 # <CJK> +0x8C52 0x8ECD # <CJK> +0x8C53 0x90E1 # <CJK> +0x8C54 0x5366 # <CJK> +0x8C55 0x8888 # <CJK> +0x8C56 0x7941 # <CJK> +0x8C57 0x4FC2 # <CJK> +0x8C58 0x50BE # <CJK> +0x8C59 0x5211 # <CJK> +0x8C5A 0x5144 # <CJK> +0x8C5B 0x5553 # <CJK> +0x8C5C 0x572D # <CJK> +0x8C5D 0x73EA # <CJK> +0x8C5E 0x578B # <CJK> +0x8C5F 0x5951 # <CJK> +0x8C60 0x5F62 # <CJK> +0x8C61 0x5F84 # <CJK> +0x8C62 0x6075 # <CJK> +0x8C63 0x6176 # <CJK> +0x8C64 0x6167 # <CJK> +0x8C65 0x61A9 # <CJK> +0x8C66 0x63B2 # <CJK> +0x8C67 0x643A # <CJK> +0x8C68 0x656C # <CJK> +0x8C69 0x666F # <CJK> +0x8C6A 0x6842 # <CJK> +0x8C6B 0x6E13 # <CJK> +0x8C6C 0x7566 # <CJK> +0x8C6D 0x7A3D # <CJK> +0x8C6E 0x7CFB # <CJK> +0x8C6F 0x7D4C # <CJK> +0x8C70 0x7D99 # <CJK> +0x8C71 0x7E4B # <CJK> +0x8C72 0x7F6B # <CJK> +0x8C73 0x830E # <CJK> +0x8C74 0x834A # <CJK> +0x8C75 0x86CD # <CJK> +0x8C76 0x8A08 # <CJK> +0x8C77 0x8A63 # <CJK> +0x8C78 0x8B66 # <CJK> +0x8C79 0x8EFD # <CJK> +0x8C7A 0x981A # <CJK> +0x8C7B 0x9D8F # <CJK> +0x8C7C 0x82B8 # <CJK> +0x8C7D 0x8FCE # <CJK> +0x8C7E 0x9BE8 # <CJK> +0x8C80 0x5287 # <CJK> +0x8C81 0x621F # <CJK> +0x8C82 0x6483 # <CJK> +0x8C83 0x6FC0 # <CJK> +0x8C84 0x9699 # <CJK> +0x8C85 0x6841 # <CJK> +0x8C86 0x5091 # <CJK> +0x8C87 0x6B20 # <CJK> +0x8C88 0x6C7A # <CJK> +0x8C89 0x6F54 # <CJK> +0x8C8A 0x7A74 # <CJK> +0x8C8B 0x7D50 # <CJK> +0x8C8C 0x8840 # <CJK> +0x8C8D 0x8A23 # <CJK> +0x8C8E 0x6708 # <CJK> +0x8C8F 0x4EF6 # <CJK> +0x8C90 0x5039 # <CJK> +0x8C91 0x5026 # <CJK> +0x8C92 0x5065 # <CJK> +0x8C93 0x517C # <CJK> +0x8C94 0x5238 # <CJK> +0x8C95 0x5263 # <CJK> +0x8C96 0x55A7 # <CJK> +0x8C97 0x570F # <CJK> +0x8C98 0x5805 # <CJK> +0x8C99 0x5ACC # <CJK> +0x8C9A 0x5EFA # <CJK> +0x8C9B 0x61B2 # <CJK> +0x8C9C 0x61F8 # <CJK> +0x8C9D 0x62F3 # <CJK> +0x8C9E 0x6372 # <CJK> +0x8C9F 0x691C # <CJK> +0x8CA0 0x6A29 # <CJK> +0x8CA1 0x727D # <CJK> +0x8CA2 0x72AC # <CJK> +0x8CA3 0x732E # <CJK> +0x8CA4 0x7814 # <CJK> +0x8CA5 0x786F # <CJK> +0x8CA6 0x7D79 # <CJK> +0x8CA7 0x770C # <CJK> +0x8CA8 0x80A9 # <CJK> +0x8CA9 0x898B # <CJK> +0x8CAA 0x8B19 # <CJK> +0x8CAB 0x8CE2 # <CJK> +0x8CAC 0x8ED2 # <CJK> +0x8CAD 0x9063 # <CJK> +0x8CAE 0x9375 # <CJK> +0x8CAF 0x967A # <CJK> +0x8CB0 0x9855 # <CJK> +0x8CB1 0x9A13 # <CJK> +0x8CB2 0x9E78 # <CJK> +0x8CB3 0x5143 # <CJK> +0x8CB4 0x539F # <CJK> +0x8CB5 0x53B3 # <CJK> +0x8CB6 0x5E7B # <CJK> +0x8CB7 0x5F26 # <CJK> +0x8CB8 0x6E1B # <CJK> +0x8CB9 0x6E90 # <CJK> +0x8CBA 0x7384 # <CJK> +0x8CBB 0x73FE # <CJK> +0x8CBC 0x7D43 # <CJK> +0x8CBD 0x8237 # <CJK> +0x8CBE 0x8A00 # <CJK> +0x8CBF 0x8AFA # <CJK> +0x8CC0 0x9650 # <CJK> +0x8CC1 0x4E4E # <CJK> +0x8CC2 0x500B # <CJK> +0x8CC3 0x53E4 # <CJK> +0x8CC4 0x547C # <CJK> +0x8CC5 0x56FA # <CJK> +0x8CC6 0x59D1 # <CJK> +0x8CC7 0x5B64 # <CJK> +0x8CC8 0x5DF1 # <CJK> +0x8CC9 0x5EAB # <CJK> +0x8CCA 0x5F27 # <CJK> +0x8CCB 0x6238 # <CJK> +0x8CCC 0x6545 # <CJK> +0x8CCD 0x67AF # <CJK> +0x8CCE 0x6E56 # <CJK> +0x8CCF 0x72D0 # <CJK> +0x8CD0 0x7CCA # <CJK> +0x8CD1 0x88B4 # <CJK> +0x8CD2 0x80A1 # <CJK> +0x8CD3 0x80E1 # <CJK> +0x8CD4 0x83F0 # <CJK> +0x8CD5 0x864E # <CJK> +0x8CD6 0x8A87 # <CJK> +0x8CD7 0x8DE8 # <CJK> +0x8CD8 0x9237 # <CJK> +0x8CD9 0x96C7 # <CJK> +0x8CDA 0x9867 # <CJK> +0x8CDB 0x9F13 # <CJK> +0x8CDC 0x4E94 # <CJK> +0x8CDD 0x4E92 # <CJK> +0x8CDE 0x4F0D # <CJK> +0x8CDF 0x5348 # <CJK> +0x8CE0 0x5449 # <CJK> +0x8CE1 0x543E # <CJK> +0x8CE2 0x5A2F # <CJK> +0x8CE3 0x5F8C # <CJK> +0x8CE4 0x5FA1 # <CJK> +0x8CE5 0x609F # <CJK> +0x8CE6 0x68A7 # <CJK> +0x8CE7 0x6A8E # <CJK> +0x8CE8 0x745A # <CJK> +0x8CE9 0x7881 # <CJK> +0x8CEA 0x8A9E # <CJK> +0x8CEB 0x8AA4 # <CJK> +0x8CEC 0x8B77 # <CJK> +0x8CED 0x9190 # <CJK> +0x8CEE 0x4E5E # <CJK> +0x8CEF 0x9BC9 # <CJK> +0x8CF0 0x4EA4 # <CJK> +0x8CF1 0x4F7C # <CJK> +0x8CF2 0x4FAF # <CJK> +0x8CF3 0x5019 # <CJK> +0x8CF4 0x5016 # <CJK> +0x8CF5 0x5149 # <CJK> +0x8CF6 0x516C # <CJK> +0x8CF7 0x529F # <CJK> +0x8CF8 0x52B9 # <CJK> +0x8CF9 0x52FE # <CJK> +0x8CFA 0x539A # <CJK> +0x8CFB 0x53E3 # <CJK> +0x8CFC 0x5411 # <CJK> +0x8D40 0x540E # <CJK> +0x8D41 0x5589 # <CJK> +0x8D42 0x5751 # <CJK> +0x8D43 0x57A2 # <CJK> +0x8D44 0x597D # <CJK> +0x8D45 0x5B54 # <CJK> +0x8D46 0x5B5D # <CJK> +0x8D47 0x5B8F # <CJK> +0x8D48 0x5DE5 # <CJK> +0x8D49 0x5DE7 # <CJK> +0x8D4A 0x5DF7 # <CJK> +0x8D4B 0x5E78 # <CJK> +0x8D4C 0x5E83 # <CJK> +0x8D4D 0x5E9A # <CJK> +0x8D4E 0x5EB7 # <CJK> +0x8D4F 0x5F18 # <CJK> +0x8D50 0x6052 # <CJK> +0x8D51 0x614C # <CJK> +0x8D52 0x6297 # <CJK> +0x8D53 0x62D8 # <CJK> +0x8D54 0x63A7 # <CJK> +0x8D55 0x653B # <CJK> +0x8D56 0x6602 # <CJK> +0x8D57 0x6643 # <CJK> +0x8D58 0x66F4 # <CJK> +0x8D59 0x676D # <CJK> +0x8D5A 0x6821 # <CJK> +0x8D5B 0x6897 # <CJK> +0x8D5C 0x69CB # <CJK> +0x8D5D 0x6C5F # <CJK> +0x8D5E 0x6D2A # <CJK> +0x8D5F 0x6D69 # <CJK> +0x8D60 0x6E2F # <CJK> +0x8D61 0x6E9D # <CJK> +0x8D62 0x7532 # <CJK> +0x8D63 0x7687 # <CJK> +0x8D64 0x786C # <CJK> +0x8D65 0x7A3F # <CJK> +0x8D66 0x7CE0 # <CJK> +0x8D67 0x7D05 # <CJK> +0x8D68 0x7D18 # <CJK> +0x8D69 0x7D5E # <CJK> +0x8D6A 0x7DB1 # <CJK> +0x8D6B 0x8015 # <CJK> +0x8D6C 0x8003 # <CJK> +0x8D6D 0x80AF # <CJK> +0x8D6E 0x80B1 # <CJK> +0x8D6F 0x8154 # <CJK> +0x8D70 0x818F # <CJK> +0x8D71 0x822A # <CJK> +0x8D72 0x8352 # <CJK> +0x8D73 0x884C # <CJK> +0x8D74 0x8861 # <CJK> +0x8D75 0x8B1B # <CJK> +0x8D76 0x8CA2 # <CJK> +0x8D77 0x8CFC # <CJK> +0x8D78 0x90CA # <CJK> +0x8D79 0x9175 # <CJK> +0x8D7A 0x9271 # <CJK> +0x8D7B 0x783F # <CJK> +0x8D7C 0x92FC # <CJK> +0x8D7D 0x95A4 # <CJK> +0x8D7E 0x964D # <CJK> +0x8D80 0x9805 # <CJK> +0x8D81 0x9999 # <CJK> +0x8D82 0x9AD8 # <CJK> +0x8D83 0x9D3B # <CJK> +0x8D84 0x525B # <CJK> +0x8D85 0x52AB # <CJK> +0x8D86 0x53F7 # <CJK> +0x8D87 0x5408 # <CJK> +0x8D88 0x58D5 # <CJK> +0x8D89 0x62F7 # <CJK> +0x8D8A 0x6FE0 # <CJK> +0x8D8B 0x8C6A # <CJK> +0x8D8C 0x8F5F # <CJK> +0x8D8D 0x9EB9 # <CJK> +0x8D8E 0x514B # <CJK> +0x8D8F 0x523B # <CJK> +0x8D90 0x544A # <CJK> +0x8D91 0x56FD # <CJK> +0x8D92 0x7A40 # <CJK> +0x8D93 0x9177 # <CJK> +0x8D94 0x9D60 # <CJK> +0x8D95 0x9ED2 # <CJK> +0x8D96 0x7344 # <CJK> +0x8D97 0x6F09 # <CJK> +0x8D98 0x8170 # <CJK> +0x8D99 0x7511 # <CJK> +0x8D9A 0x5FFD # <CJK> +0x8D9B 0x60DA # <CJK> +0x8D9C 0x9AA8 # <CJK> +0x8D9D 0x72DB # <CJK> +0x8D9E 0x8FBC # <CJK> +0x8D9F 0x6B64 # <CJK> +0x8DA0 0x9803 # <CJK> +0x8DA1 0x4ECA # <CJK> +0x8DA2 0x56F0 # <CJK> +0x8DA3 0x5764 # <CJK> +0x8DA4 0x58BE # <CJK> +0x8DA5 0x5A5A # <CJK> +0x8DA6 0x6068 # <CJK> +0x8DA7 0x61C7 # <CJK> +0x8DA8 0x660F # <CJK> +0x8DA9 0x6606 # <CJK> +0x8DAA 0x6839 # <CJK> +0x8DAB 0x68B1 # <CJK> +0x8DAC 0x6DF7 # <CJK> +0x8DAD 0x75D5 # <CJK> +0x8DAE 0x7D3A # <CJK> +0x8DAF 0x826E # <CJK> +0x8DB0 0x9B42 # <CJK> +0x8DB1 0x4E9B # <CJK> +0x8DB2 0x4F50 # <CJK> +0x8DB3 0x53C9 # <CJK> +0x8DB4 0x5506 # <CJK> +0x8DB5 0x5D6F # <CJK> +0x8DB6 0x5DE6 # <CJK> +0x8DB7 0x5DEE # <CJK> +0x8DB8 0x67FB # <CJK> +0x8DB9 0x6C99 # <CJK> +0x8DBA 0x7473 # <CJK> +0x8DBB 0x7802 # <CJK> +0x8DBC 0x8A50 # <CJK> +0x8DBD 0x9396 # <CJK> +0x8DBE 0x88DF # <CJK> +0x8DBF 0x5750 # <CJK> +0x8DC0 0x5EA7 # <CJK> +0x8DC1 0x632B # <CJK> +0x8DC2 0x50B5 # <CJK> +0x8DC3 0x50AC # <CJK> +0x8DC4 0x518D # <CJK> +0x8DC5 0x6700 # <CJK> +0x8DC6 0x54C9 # <CJK> +0x8DC7 0x585E # <CJK> +0x8DC8 0x59BB # <CJK> +0x8DC9 0x5BB0 # <CJK> +0x8DCA 0x5F69 # <CJK> +0x8DCB 0x624D # <CJK> +0x8DCC 0x63A1 # <CJK> +0x8DCD 0x683D # <CJK> +0x8DCE 0x6B73 # <CJK> +0x8DCF 0x6E08 # <CJK> +0x8DD0 0x707D # <CJK> +0x8DD1 0x91C7 # <CJK> +0x8DD2 0x7280 # <CJK> +0x8DD3 0x7815 # <CJK> +0x8DD4 0x7826 # <CJK> +0x8DD5 0x796D # <CJK> +0x8DD6 0x658E # <CJK> +0x8DD7 0x7D30 # <CJK> +0x8DD8 0x83DC # <CJK> +0x8DD9 0x88C1 # <CJK> +0x8DDA 0x8F09 # <CJK> +0x8DDB 0x969B # <CJK> +0x8DDC 0x5264 # <CJK> +0x8DDD 0x5728 # <CJK> +0x8DDE 0x6750 # <CJK> +0x8DDF 0x7F6A # <CJK> +0x8DE0 0x8CA1 # <CJK> +0x8DE1 0x51B4 # <CJK> +0x8DE2 0x5742 # <CJK> +0x8DE3 0x962A # <CJK> +0x8DE4 0x583A # <CJK> +0x8DE5 0x698A # <CJK> +0x8DE6 0x80B4 # <CJK> +0x8DE7 0x54B2 # <CJK> +0x8DE8 0x5D0E # <CJK> +0x8DE9 0x57FC # <CJK> +0x8DEA 0x7895 # <CJK> +0x8DEB 0x9DFA # <CJK> +0x8DEC 0x4F5C # <CJK> +0x8DED 0x524A # <CJK> +0x8DEE 0x548B # <CJK> +0x8DEF 0x643E # <CJK> +0x8DF0 0x6628 # <CJK> +0x8DF1 0x6714 # <CJK> +0x8DF2 0x67F5 # <CJK> +0x8DF3 0x7A84 # <CJK> +0x8DF4 0x7B56 # <CJK> +0x8DF5 0x7D22 # <CJK> +0x8DF6 0x932F # <CJK> +0x8DF7 0x685C # <CJK> +0x8DF8 0x9BAD # <CJK> +0x8DF9 0x7B39 # <CJK> +0x8DFA 0x5319 # <CJK> +0x8DFB 0x518A # <CJK> +0x8DFC 0x5237 # <CJK> +0x8E40 0x5BDF # <CJK> +0x8E41 0x62F6 # <CJK> +0x8E42 0x64AE # <CJK> +0x8E43 0x64E6 # <CJK> +0x8E44 0x672D # <CJK> +0x8E45 0x6BBA # <CJK> +0x8E46 0x85A9 # <CJK> +0x8E47 0x96D1 # <CJK> +0x8E48 0x7690 # <CJK> +0x8E49 0x9BD6 # <CJK> +0x8E4A 0x634C # <CJK> +0x8E4B 0x9306 # <CJK> +0x8E4C 0x9BAB # <CJK> +0x8E4D 0x76BF # <CJK> +0x8E4E 0x6652 # <CJK> +0x8E4F 0x4E09 # <CJK> +0x8E50 0x5098 # <CJK> +0x8E51 0x53C2 # <CJK> +0x8E52 0x5C71 # <CJK> +0x8E53 0x60E8 # <CJK> +0x8E54 0x6492 # <CJK> +0x8E55 0x6563 # <CJK> +0x8E56 0x685F # <CJK> +0x8E57 0x71E6 # <CJK> +0x8E58 0x73CA # <CJK> +0x8E59 0x7523 # <CJK> +0x8E5A 0x7B97 # <CJK> +0x8E5B 0x7E82 # <CJK> +0x8E5C 0x8695 # <CJK> +0x8E5D 0x8B83 # <CJK> +0x8E5E 0x8CDB # <CJK> +0x8E5F 0x9178 # <CJK> +0x8E60 0x9910 # <CJK> +0x8E61 0x65AC # <CJK> +0x8E62 0x66AB # <CJK> +0x8E63 0x6B8B # <CJK> +0x8E64 0x4ED5 # <CJK> +0x8E65 0x4ED4 # <CJK> +0x8E66 0x4F3A # <CJK> +0x8E67 0x4F7F # <CJK> +0x8E68 0x523A # <CJK> +0x8E69 0x53F8 # <CJK> +0x8E6A 0x53F2 # <CJK> +0x8E6B 0x55E3 # <CJK> +0x8E6C 0x56DB # <CJK> +0x8E6D 0x58EB # <CJK> +0x8E6E 0x59CB # <CJK> +0x8E6F 0x59C9 # <CJK> +0x8E70 0x59FF # <CJK> +0x8E71 0x5B50 # <CJK> +0x8E72 0x5C4D # <CJK> +0x8E73 0x5E02 # <CJK> +0x8E74 0x5E2B # <CJK> +0x8E75 0x5FD7 # <CJK> +0x8E76 0x601D # <CJK> +0x8E77 0x6307 # <CJK> +0x8E78 0x652F # <CJK> +0x8E79 0x5B5C # <CJK> +0x8E7A 0x65AF # <CJK> +0x8E7B 0x65BD # <CJK> +0x8E7C 0x65E8 # <CJK> +0x8E7D 0x679D # <CJK> +0x8E7E 0x6B62 # <CJK> +0x8E80 0x6B7B # <CJK> +0x8E81 0x6C0F # <CJK> +0x8E82 0x7345 # <CJK> +0x8E83 0x7949 # <CJK> +0x8E84 0x79C1 # <CJK> +0x8E85 0x7CF8 # <CJK> +0x8E86 0x7D19 # <CJK> +0x8E87 0x7D2B # <CJK> +0x8E88 0x80A2 # <CJK> +0x8E89 0x8102 # <CJK> +0x8E8A 0x81F3 # <CJK> +0x8E8B 0x8996 # <CJK> +0x8E8C 0x8A5E # <CJK> +0x8E8D 0x8A69 # <CJK> +0x8E8E 0x8A66 # <CJK> +0x8E8F 0x8A8C # <CJK> +0x8E90 0x8AEE # <CJK> +0x8E91 0x8CC7 # <CJK> +0x8E92 0x8CDC # <CJK> +0x8E93 0x96CC # <CJK> +0x8E94 0x98FC # <CJK> +0x8E95 0x6B6F # <CJK> +0x8E96 0x4E8B # <CJK> +0x8E97 0x4F3C # <CJK> +0x8E98 0x4F8D # <CJK> +0x8E99 0x5150 # <CJK> +0x8E9A 0x5B57 # <CJK> +0x8E9B 0x5BFA # <CJK> +0x8E9C 0x6148 # <CJK> +0x8E9D 0x6301 # <CJK> +0x8E9E 0x6642 # <CJK> +0x8E9F 0x6B21 # <CJK> +0x8EA0 0x6ECB # <CJK> +0x8EA1 0x6CBB # <CJK> +0x8EA2 0x723E # <CJK> +0x8EA3 0x74BD # <CJK> +0x8EA4 0x75D4 # <CJK> +0x8EA5 0x78C1 # <CJK> +0x8EA6 0x793A # <CJK> +0x8EA7 0x800C # <CJK> +0x8EA8 0x8033 # <CJK> +0x8EA9 0x81EA # <CJK> +0x8EAA 0x8494 # <CJK> +0x8EAB 0x8F9E # <CJK> +0x8EAC 0x6C50 # <CJK> +0x8EAD 0x9E7F # <CJK> +0x8EAE 0x5F0F # <CJK> +0x8EAF 0x8B58 # <CJK> +0x8EB0 0x9D2B # <CJK> +0x8EB1 0x7AFA # <CJK> +0x8EB2 0x8EF8 # <CJK> +0x8EB3 0x5B8D # <CJK> +0x8EB4 0x96EB # <CJK> +0x8EB5 0x4E03 # <CJK> +0x8EB6 0x53F1 # <CJK> +0x8EB7 0x57F7 # <CJK> +0x8EB8 0x5931 # <CJK> +0x8EB9 0x5AC9 # <CJK> +0x8EBA 0x5BA4 # <CJK> +0x8EBB 0x6089 # <CJK> +0x8EBC 0x6E7F # <CJK> +0x8EBD 0x6F06 # <CJK> +0x8EBE 0x75BE # <CJK> +0x8EBF 0x8CEA # <CJK> +0x8EC0 0x5B9F # <CJK> +0x8EC1 0x8500 # <CJK> +0x8EC2 0x7BE0 # <CJK> +0x8EC3 0x5072 # <CJK> +0x8EC4 0x67F4 # <CJK> +0x8EC5 0x829D # <CJK> +0x8EC6 0x5C61 # <CJK> +0x8EC7 0x854A # <CJK> +0x8EC8 0x7E1E # <CJK> +0x8EC9 0x820E # <CJK> +0x8ECA 0x5199 # <CJK> +0x8ECB 0x5C04 # <CJK> +0x8ECC 0x6368 # <CJK> +0x8ECD 0x8D66 # <CJK> +0x8ECE 0x659C # <CJK> +0x8ECF 0x716E # <CJK> +0x8ED0 0x793E # <CJK> +0x8ED1 0x7D17 # <CJK> +0x8ED2 0x8005 # <CJK> +0x8ED3 0x8B1D # <CJK> +0x8ED4 0x8ECA # <CJK> +0x8ED5 0x906E # <CJK> +0x8ED6 0x86C7 # <CJK> +0x8ED7 0x90AA # <CJK> +0x8ED8 0x501F # <CJK> +0x8ED9 0x52FA # <CJK> +0x8EDA 0x5C3A # <CJK> +0x8EDB 0x6753 # <CJK> +0x8EDC 0x707C # <CJK> +0x8EDD 0x7235 # <CJK> +0x8EDE 0x914C # <CJK> +0x8EDF 0x91C8 # <CJK> +0x8EE0 0x932B # <CJK> +0x8EE1 0x82E5 # <CJK> +0x8EE2 0x5BC2 # <CJK> +0x8EE3 0x5F31 # <CJK> +0x8EE4 0x60F9 # <CJK> +0x8EE5 0x4E3B # <CJK> +0x8EE6 0x53D6 # <CJK> +0x8EE7 0x5B88 # <CJK> +0x8EE8 0x624B # <CJK> +0x8EE9 0x6731 # <CJK> +0x8EEA 0x6B8A # <CJK> +0x8EEB 0x72E9 # <CJK> +0x8EEC 0x73E0 # <CJK> +0x8EED 0x7A2E # <CJK> +0x8EEE 0x816B # <CJK> +0x8EEF 0x8DA3 # <CJK> +0x8EF0 0x9152 # <CJK> +0x8EF1 0x9996 # <CJK> +0x8EF2 0x5112 # <CJK> +0x8EF3 0x53D7 # <CJK> +0x8EF4 0x546A # <CJK> +0x8EF5 0x5BFF # <CJK> +0x8EF6 0x6388 # <CJK> +0x8EF7 0x6A39 # <CJK> +0x8EF8 0x7DAC # <CJK> +0x8EF9 0x9700 # <CJK> +0x8EFA 0x56DA # <CJK> +0x8EFB 0x53CE # <CJK> +0x8EFC 0x5468 # <CJK> +0x8F40 0x5B97 # <CJK> +0x8F41 0x5C31 # <CJK> +0x8F42 0x5DDE # <CJK> +0x8F43 0x4FEE # <CJK> +0x8F44 0x6101 # <CJK> +0x8F45 0x62FE # <CJK> +0x8F46 0x6D32 # <CJK> +0x8F47 0x79C0 # <CJK> +0x8F48 0x79CB # <CJK> +0x8F49 0x7D42 # <CJK> +0x8F4A 0x7E4D # <CJK> +0x8F4B 0x7FD2 # <CJK> +0x8F4C 0x81ED # <CJK> +0x8F4D 0x821F # <CJK> +0x8F4E 0x8490 # <CJK> +0x8F4F 0x8846 # <CJK> +0x8F50 0x8972 # <CJK> +0x8F51 0x8B90 # <CJK> +0x8F52 0x8E74 # <CJK> +0x8F53 0x8F2F # <CJK> +0x8F54 0x9031 # <CJK> +0x8F55 0x914B # <CJK> +0x8F56 0x916C # <CJK> +0x8F57 0x96C6 # <CJK> +0x8F58 0x919C # <CJK> +0x8F59 0x4EC0 # <CJK> +0x8F5A 0x4F4F # <CJK> +0x8F5B 0x5145 # <CJK> +0x8F5C 0x5341 # <CJK> +0x8F5D 0x5F93 # <CJK> +0x8F5E 0x620E # <CJK> +0x8F5F 0x67D4 # <CJK> +0x8F60 0x6C41 # <CJK> +0x8F61 0x6E0B # <CJK> +0x8F62 0x7363 # <CJK> +0x8F63 0x7E26 # <CJK> +0x8F64 0x91CD # <CJK> +0x8F65 0x9283 # <CJK> +0x8F66 0x53D4 # <CJK> +0x8F67 0x5919 # <CJK> +0x8F68 0x5BBF # <CJK> +0x8F69 0x6DD1 # <CJK> +0x8F6A 0x795D # <CJK> +0x8F6B 0x7E2E # <CJK> +0x8F6C 0x7C9B # <CJK> +0x8F6D 0x587E # <CJK> +0x8F6E 0x719F # <CJK> +0x8F6F 0x51FA # <CJK> +0x8F70 0x8853 # <CJK> +0x8F71 0x8FF0 # <CJK> +0x8F72 0x4FCA # <CJK> +0x8F73 0x5CFB # <CJK> +0x8F74 0x6625 # <CJK> +0x8F75 0x77AC # <CJK> +0x8F76 0x7AE3 # <CJK> +0x8F77 0x821C # <CJK> +0x8F78 0x99FF # <CJK> +0x8F79 0x51C6 # <CJK> +0x8F7A 0x5FAA # <CJK> +0x8F7B 0x65EC # <CJK> +0x8F7C 0x696F # <CJK> +0x8F7D 0x6B89 # <CJK> +0x8F7E 0x6DF3 # <CJK> +0x8F80 0x6E96 # <CJK> +0x8F81 0x6F64 # <CJK> +0x8F82 0x76FE # <CJK> +0x8F83 0x7D14 # <CJK> +0x8F84 0x5DE1 # <CJK> +0x8F85 0x9075 # <CJK> +0x8F86 0x9187 # <CJK> +0x8F87 0x9806 # <CJK> +0x8F88 0x51E6 # <CJK> +0x8F89 0x521D # <CJK> +0x8F8A 0x6240 # <CJK> +0x8F8B 0x6691 # <CJK> +0x8F8C 0x66D9 # <CJK> +0x8F8D 0x6E1A # <CJK> +0x8F8E 0x5EB6 # <CJK> +0x8F8F 0x7DD2 # <CJK> +0x8F90 0x7F72 # <CJK> +0x8F91 0x66F8 # <CJK> +0x8F92 0x85AF # <CJK> +0x8F93 0x85F7 # <CJK> +0x8F94 0x8AF8 # <CJK> +0x8F95 0x52A9 # <CJK> +0x8F96 0x53D9 # <CJK> +0x8F97 0x5973 # <CJK> +0x8F98 0x5E8F # <CJK> +0x8F99 0x5F90 # <CJK> +0x8F9A 0x6055 # <CJK> +0x8F9B 0x92E4 # <CJK> +0x8F9C 0x9664 # <CJK> +0x8F9D 0x50B7 # <CJK> +0x8F9E 0x511F # <CJK> +0x8F9F 0x52DD # <CJK> +0x8FA0 0x5320 # <CJK> +0x8FA1 0x5347 # <CJK> +0x8FA2 0x53EC # <CJK> +0x8FA3 0x54E8 # <CJK> +0x8FA4 0x5546 # <CJK> +0x8FA5 0x5531 # <CJK> +0x8FA6 0x5617 # <CJK> +0x8FA7 0x5968 # <CJK> +0x8FA8 0x59BE # <CJK> +0x8FA9 0x5A3C # <CJK> +0x8FAA 0x5BB5 # <CJK> +0x8FAB 0x5C06 # <CJK> +0x8FAC 0x5C0F # <CJK> +0x8FAD 0x5C11 # <CJK> +0x8FAE 0x5C1A # <CJK> +0x8FAF 0x5E84 # <CJK> +0x8FB0 0x5E8A # <CJK> +0x8FB1 0x5EE0 # <CJK> +0x8FB2 0x5F70 # <CJK> +0x8FB3 0x627F # <CJK> +0x8FB4 0x6284 # <CJK> +0x8FB5 0x62DB # <CJK> +0x8FB6 0x638C # <CJK> +0x8FB7 0x6377 # <CJK> +0x8FB8 0x6607 # <CJK> +0x8FB9 0x660C # <CJK> +0x8FBA 0x662D # <CJK> +0x8FBB 0x6676 # <CJK> +0x8FBC 0x677E # <CJK> +0x8FBD 0x68A2 # <CJK> +0x8FBE 0x6A1F # <CJK> +0x8FBF 0x6A35 # <CJK> +0x8FC0 0x6CBC # <CJK> +0x8FC1 0x6D88 # <CJK> +0x8FC2 0x6E09 # <CJK> +0x8FC3 0x6E58 # <CJK> +0x8FC4 0x713C # <CJK> +0x8FC5 0x7126 # <CJK> +0x8FC6 0x7167 # <CJK> +0x8FC7 0x75C7 # <CJK> +0x8FC8 0x7701 # <CJK> +0x8FC9 0x785D # <CJK> +0x8FCA 0x7901 # <CJK> +0x8FCB 0x7965 # <CJK> +0x8FCC 0x79F0 # <CJK> +0x8FCD 0x7AE0 # <CJK> +0x8FCE 0x7B11 # <CJK> +0x8FCF 0x7CA7 # <CJK> +0x8FD0 0x7D39 # <CJK> +0x8FD1 0x8096 # <CJK> +0x8FD2 0x83D6 # <CJK> +0x8FD3 0x848B # <CJK> +0x8FD4 0x8549 # <CJK> +0x8FD5 0x885D # <CJK> +0x8FD6 0x88F3 # <CJK> +0x8FD7 0x8A1F # <CJK> +0x8FD8 0x8A3C # <CJK> +0x8FD9 0x8A54 # <CJK> +0x8FDA 0x8A73 # <CJK> +0x8FDB 0x8C61 # <CJK> +0x8FDC 0x8CDE # <CJK> +0x8FDD 0x91A4 # <CJK> +0x8FDE 0x9266 # <CJK> +0x8FDF 0x937E # <CJK> +0x8FE0 0x9418 # <CJK> +0x8FE1 0x969C # <CJK> +0x8FE2 0x9798 # <CJK> +0x8FE3 0x4E0A # <CJK> +0x8FE4 0x4E08 # <CJK> +0x8FE5 0x4E1E # <CJK> +0x8FE6 0x4E57 # <CJK> +0x8FE7 0x5197 # <CJK> +0x8FE8 0x5270 # <CJK> +0x8FE9 0x57CE # <CJK> +0x8FEA 0x5834 # <CJK> +0x8FEB 0x58CC # <CJK> +0x8FEC 0x5B22 # <CJK> +0x8FED 0x5E38 # <CJK> +0x8FEE 0x60C5 # <CJK> +0x8FEF 0x64FE # <CJK> +0x8FF0 0x6761 # <CJK> +0x8FF1 0x6756 # <CJK> +0x8FF2 0x6D44 # <CJK> +0x8FF3 0x72B6 # <CJK> +0x8FF4 0x7573 # <CJK> +0x8FF5 0x7A63 # <CJK> +0x8FF6 0x84B8 # <CJK> +0x8FF7 0x8B72 # <CJK> +0x8FF8 0x91B8 # <CJK> +0x8FF9 0x9320 # <CJK> +0x8FFA 0x5631 # <CJK> +0x8FFB 0x57F4 # <CJK> +0x8FFC 0x98FE # <CJK> +0x9040 0x62ED # <CJK> +0x9041 0x690D # <CJK> +0x9042 0x6B96 # <CJK> +0x9043 0x71ED # <CJK> +0x9044 0x7E54 # <CJK> +0x9045 0x8077 # <CJK> +0x9046 0x8272 # <CJK> +0x9047 0x89E6 # <CJK> +0x9048 0x98DF # <CJK> +0x9049 0x8755 # <CJK> +0x904A 0x8FB1 # <CJK> +0x904B 0x5C3B # <CJK> +0x904C 0x4F38 # <CJK> +0x904D 0x4FE1 # <CJK> +0x904E 0x4FB5 # <CJK> +0x904F 0x5507 # <CJK> +0x9050 0x5A20 # <CJK> +0x9051 0x5BDD # <CJK> +0x9052 0x5BE9 # <CJK> +0x9053 0x5FC3 # <CJK> +0x9054 0x614E # <CJK> +0x9055 0x632F # <CJK> +0x9056 0x65B0 # <CJK> +0x9057 0x664B # <CJK> +0x9058 0x68EE # <CJK> +0x9059 0x699B # <CJK> +0x905A 0x6D78 # <CJK> +0x905B 0x6DF1 # <CJK> +0x905C 0x7533 # <CJK> +0x905D 0x75B9 # <CJK> +0x905E 0x771F # <CJK> +0x905F 0x795E # <CJK> +0x9060 0x79E6 # <CJK> +0x9061 0x7D33 # <CJK> +0x9062 0x81E3 # <CJK> +0x9063 0x82AF # <CJK> +0x9064 0x85AA # <CJK> +0x9065 0x89AA # <CJK> +0x9066 0x8A3A # <CJK> +0x9067 0x8EAB # <CJK> +0x9068 0x8F9B # <CJK> +0x9069 0x9032 # <CJK> +0x906A 0x91DD # <CJK> +0x906B 0x9707 # <CJK> +0x906C 0x4EBA # <CJK> +0x906D 0x4EC1 # <CJK> +0x906E 0x5203 # <CJK> +0x906F 0x5875 # <CJK> +0x9070 0x58EC # <CJK> +0x9071 0x5C0B # <CJK> +0x9072 0x751A # <CJK> +0x9073 0x5C3D # <CJK> +0x9074 0x814E # <CJK> +0x9075 0x8A0A # <CJK> +0x9076 0x8FC5 # <CJK> +0x9077 0x9663 # <CJK> +0x9078 0x976D # <CJK> +0x9079 0x7B25 # <CJK> +0x907A 0x8ACF # <CJK> +0x907B 0x9808 # <CJK> +0x907C 0x9162 # <CJK> +0x907D 0x56F3 # <CJK> +0x907E 0x53A8 # <CJK> +0x9080 0x9017 # <CJK> +0x9081 0x5439 # <CJK> +0x9082 0x5782 # <CJK> +0x9083 0x5E25 # <CJK> +0x9084 0x63A8 # <CJK> +0x9085 0x6C34 # <CJK> +0x9086 0x708A # <CJK> +0x9087 0x7761 # <CJK> +0x9088 0x7C8B # <CJK> +0x9089 0x7FE0 # <CJK> +0x908A 0x8870 # <CJK> +0x908B 0x9042 # <CJK> +0x908C 0x9154 # <CJK> +0x908D 0x9310 # <CJK> +0x908E 0x9318 # <CJK> +0x908F 0x968F # <CJK> +0x9090 0x745E # <CJK> +0x9091 0x9AC4 # <CJK> +0x9092 0x5D07 # <CJK> +0x9093 0x5D69 # <CJK> +0x9094 0x6570 # <CJK> +0x9095 0x67A2 # <CJK> +0x9096 0x8DA8 # <CJK> +0x9097 0x96DB # <CJK> +0x9098 0x636E # <CJK> +0x9099 0x6749 # <CJK> +0x909A 0x6919 # <CJK> +0x909B 0x83C5 # <CJK> +0x909C 0x9817 # <CJK> +0x909D 0x96C0 # <CJK> +0x909E 0x88FE # <CJK> +0x909F 0x6F84 # <CJK> +0x90A0 0x647A # <CJK> +0x90A1 0x5BF8 # <CJK> +0x90A2 0x4E16 # <CJK> +0x90A3 0x702C # <CJK> +0x90A4 0x755D # <CJK> +0x90A5 0x662F # <CJK> +0x90A6 0x51C4 # <CJK> +0x90A7 0x5236 # <CJK> +0x90A8 0x52E2 # <CJK> +0x90A9 0x59D3 # <CJK> +0x90AA 0x5F81 # <CJK> +0x90AB 0x6027 # <CJK> +0x90AC 0x6210 # <CJK> +0x90AD 0x653F # <CJK> +0x90AE 0x6574 # <CJK> +0x90AF 0x661F # <CJK> +0x90B0 0x6674 # <CJK> +0x90B1 0x68F2 # <CJK> +0x90B2 0x6816 # <CJK> +0x90B3 0x6B63 # <CJK> +0x90B4 0x6E05 # <CJK> +0x90B5 0x7272 # <CJK> +0x90B6 0x751F # <CJK> +0x90B7 0x76DB # <CJK> +0x90B8 0x7CBE # <CJK> +0x90B9 0x8056 # <CJK> +0x90BA 0x58F0 # <CJK> +0x90BB 0x88FD # <CJK> +0x90BC 0x897F # <CJK> +0x90BD 0x8AA0 # <CJK> +0x90BE 0x8A93 # <CJK> +0x90BF 0x8ACB # <CJK> +0x90C0 0x901D # <CJK> +0x90C1 0x9192 # <CJK> +0x90C2 0x9752 # <CJK> +0x90C3 0x9759 # <CJK> +0x90C4 0x6589 # <CJK> +0x90C5 0x7A0E # <CJK> +0x90C6 0x8106 # <CJK> +0x90C7 0x96BB # <CJK> +0x90C8 0x5E2D # <CJK> +0x90C9 0x60DC # <CJK> +0x90CA 0x621A # <CJK> +0x90CB 0x65A5 # <CJK> +0x90CC 0x6614 # <CJK> +0x90CD 0x6790 # <CJK> +0x90CE 0x77F3 # <CJK> +0x90CF 0x7A4D # <CJK> +0x90D0 0x7C4D # <CJK> +0x90D1 0x7E3E # <CJK> +0x90D2 0x810A # <CJK> +0x90D3 0x8CAC # <CJK> +0x90D4 0x8D64 # <CJK> +0x90D5 0x8DE1 # <CJK> +0x90D6 0x8E5F # <CJK> +0x90D7 0x78A9 # <CJK> +0x90D8 0x5207 # <CJK> +0x90D9 0x62D9 # <CJK> +0x90DA 0x63A5 # <CJK> +0x90DB 0x6442 # <CJK> +0x90DC 0x6298 # <CJK> +0x90DD 0x8A2D # <CJK> +0x90DE 0x7A83 # <CJK> +0x90DF 0x7BC0 # <CJK> +0x90E0 0x8AAC # <CJK> +0x90E1 0x96EA # <CJK> +0x90E2 0x7D76 # <CJK> +0x90E3 0x820C # <CJK> +0x90E4 0x8749 # <CJK> +0x90E5 0x4ED9 # <CJK> +0x90E6 0x5148 # <CJK> +0x90E7 0x5343 # <CJK> +0x90E8 0x5360 # <CJK> +0x90E9 0x5BA3 # <CJK> +0x90EA 0x5C02 # <CJK> +0x90EB 0x5C16 # <CJK> +0x90EC 0x5DDD # <CJK> +0x90ED 0x6226 # <CJK> +0x90EE 0x6247 # <CJK> +0x90EF 0x64B0 # <CJK> +0x90F0 0x6813 # <CJK> +0x90F1 0x6834 # <CJK> +0x90F2 0x6CC9 # <CJK> +0x90F3 0x6D45 # <CJK> +0x90F4 0x6D17 # <CJK> +0x90F5 0x67D3 # <CJK> +0x90F6 0x6F5C # <CJK> +0x90F7 0x714E # <CJK> +0x90F8 0x717D # <CJK> +0x90F9 0x65CB # <CJK> +0x90FA 0x7A7F # <CJK> +0x90FB 0x7BAD # <CJK> +0x90FC 0x7DDA # <CJK> +0x9140 0x7E4A # <CJK> +0x9141 0x7FA8 # <CJK> +0x9142 0x817A # <CJK> +0x9143 0x821B # <CJK> +0x9144 0x8239 # <CJK> +0x9145 0x85A6 # <CJK> +0x9146 0x8A6E # <CJK> +0x9147 0x8CCE # <CJK> +0x9148 0x8DF5 # <CJK> +0x9149 0x9078 # <CJK> +0x914A 0x9077 # <CJK> +0x914B 0x92AD # <CJK> +0x914C 0x9291 # <CJK> +0x914D 0x9583 # <CJK> +0x914E 0x9BAE # <CJK> +0x914F 0x524D # <CJK> +0x9150 0x5584 # <CJK> +0x9151 0x6F38 # <CJK> +0x9152 0x7136 # <CJK> +0x9153 0x5168 # <CJK> +0x9154 0x7985 # <CJK> +0x9155 0x7E55 # <CJK> +0x9156 0x81B3 # <CJK> +0x9157 0x7CCE # <CJK> +0x9158 0x564C # <CJK> +0x9159 0x5851 # <CJK> +0x915A 0x5CA8 # <CJK> +0x915B 0x63AA # <CJK> +0x915C 0x66FE # <CJK> +0x915D 0x66FD # <CJK> +0x915E 0x695A # <CJK> +0x915F 0x72D9 # <CJK> +0x9160 0x758F # <CJK> +0x9161 0x758E # <CJK> +0x9162 0x790E # <CJK> +0x9163 0x7956 # <CJK> +0x9164 0x79DF # <CJK> +0x9165 0x7C97 # <CJK> +0x9166 0x7D20 # <CJK> +0x9167 0x7D44 # <CJK> +0x9168 0x8607 # <CJK> +0x9169 0x8A34 # <CJK> +0x916A 0x963B # <CJK> +0x916B 0x9061 # <CJK> +0x916C 0x9F20 # <CJK> +0x916D 0x50E7 # <CJK> +0x916E 0x5275 # <CJK> +0x916F 0x53CC # <CJK> +0x9170 0x53E2 # <CJK> +0x9171 0x5009 # <CJK> +0x9172 0x55AA # <CJK> +0x9173 0x58EE # <CJK> +0x9174 0x594F # <CJK> +0x9175 0x723D # <CJK> +0x9176 0x5B8B # <CJK> +0x9177 0x5C64 # <CJK> +0x9178 0x531D # <CJK> +0x9179 0x60E3 # <CJK> +0x917A 0x60F3 # <CJK> +0x917B 0x635C # <CJK> +0x917C 0x6383 # <CJK> +0x917D 0x633F # <CJK> +0x917E 0x63BB # <CJK> +0x9180 0x64CD # <CJK> +0x9181 0x65E9 # <CJK> +0x9182 0x66F9 # <CJK> +0x9183 0x5DE3 # <CJK> +0x9184 0x69CD # <CJK> +0x9185 0x69FD # <CJK> +0x9186 0x6F15 # <CJK> +0x9187 0x71E5 # <CJK> +0x9188 0x4E89 # <CJK> +0x9189 0x75E9 # <CJK> +0x918A 0x76F8 # <CJK> +0x918B 0x7A93 # <CJK> +0x918C 0x7CDF # <CJK> +0x918D 0x7DCF # <CJK> +0x918E 0x7D9C # <CJK> +0x918F 0x8061 # <CJK> +0x9190 0x8349 # <CJK> +0x9191 0x8358 # <CJK> +0x9192 0x846C # <CJK> +0x9193 0x84BC # <CJK> +0x9194 0x85FB # <CJK> +0x9195 0x88C5 # <CJK> +0x9196 0x8D70 # <CJK> +0x9197 0x9001 # <CJK> +0x9198 0x906D # <CJK> +0x9199 0x9397 # <CJK> +0x919A 0x971C # <CJK> +0x919B 0x9A12 # <CJK> +0x919C 0x50CF # <CJK> +0x919D 0x5897 # <CJK> +0x919E 0x618E # <CJK> +0x919F 0x81D3 # <CJK> +0x91A0 0x8535 # <CJK> +0x91A1 0x8D08 # <CJK> +0x91A2 0x9020 # <CJK> +0x91A3 0x4FC3 # <CJK> +0x91A4 0x5074 # <CJK> +0x91A5 0x5247 # <CJK> +0x91A6 0x5373 # <CJK> +0x91A7 0x606F # <CJK> +0x91A8 0x6349 # <CJK> +0x91A9 0x675F # <CJK> +0x91AA 0x6E2C # <CJK> +0x91AB 0x8DB3 # <CJK> +0x91AC 0x901F # <CJK> +0x91AD 0x4FD7 # <CJK> +0x91AE 0x5C5E # <CJK> +0x91AF 0x8CCA # <CJK> +0x91B0 0x65CF # <CJK> +0x91B1 0x7D9A # <CJK> +0x91B2 0x5352 # <CJK> +0x91B3 0x8896 # <CJK> +0x91B4 0x5176 # <CJK> +0x91B5 0x63C3 # <CJK> +0x91B6 0x5B58 # <CJK> +0x91B7 0x5B6B # <CJK> +0x91B8 0x5C0A # <CJK> +0x91B9 0x640D # <CJK> +0x91BA 0x6751 # <CJK> +0x91BB 0x905C # <CJK> +0x91BC 0x4ED6 # <CJK> +0x91BD 0x591A # <CJK> +0x91BE 0x592A # <CJK> +0x91BF 0x6C70 # <CJK> +0x91C0 0x8A51 # <CJK> +0x91C1 0x553E # <CJK> +0x91C2 0x5815 # <CJK> +0x91C3 0x59A5 # <CJK> +0x91C4 0x60F0 # <CJK> +0x91C5 0x6253 # <CJK> +0x91C6 0x67C1 # <CJK> +0x91C7 0x8235 # <CJK> +0x91C8 0x6955 # <CJK> +0x91C9 0x9640 # <CJK> +0x91CA 0x99C4 # <CJK> +0x91CB 0x9A28 # <CJK> +0x91CC 0x4F53 # <CJK> +0x91CD 0x5806 # <CJK> +0x91CE 0x5BFE # <CJK> +0x91CF 0x8010 # <CJK> +0x91D0 0x5CB1 # <CJK> +0x91D1 0x5E2F # <CJK> +0x91D2 0x5F85 # <CJK> +0x91D3 0x6020 # <CJK> +0x91D4 0x614B # <CJK> +0x91D5 0x6234 # <CJK> +0x91D6 0x66FF # <CJK> +0x91D7 0x6CF0 # <CJK> +0x91D8 0x6EDE # <CJK> +0x91D9 0x80CE # <CJK> +0x91DA 0x817F # <CJK> +0x91DB 0x82D4 # <CJK> +0x91DC 0x888B # <CJK> +0x91DD 0x8CB8 # <CJK> +0x91DE 0x9000 # <CJK> +0x91DF 0x902E # <CJK> +0x91E0 0x968A # <CJK> +0x91E1 0x9EDB # <CJK> +0x91E2 0x9BDB # <CJK> +0x91E3 0x4EE3 # <CJK> +0x91E4 0x53F0 # <CJK> +0x91E5 0x5927 # <CJK> +0x91E6 0x7B2C # <CJK> +0x91E7 0x918D # <CJK> +0x91E8 0x984C # <CJK> +0x91E9 0x9DF9 # <CJK> +0x91EA 0x6EDD # <CJK> +0x91EB 0x7027 # <CJK> +0x91EC 0x5353 # <CJK> +0x91ED 0x5544 # <CJK> +0x91EE 0x5B85 # <CJK> +0x91EF 0x6258 # <CJK> +0x91F0 0x629E # <CJK> +0x91F1 0x62D3 # <CJK> +0x91F2 0x6CA2 # <CJK> +0x91F3 0x6FEF # <CJK> +0x91F4 0x7422 # <CJK> +0x91F5 0x8A17 # <CJK> +0x91F6 0x9438 # <CJK> +0x91F7 0x6FC1 # <CJK> +0x91F8 0x8AFE # <CJK> +0x91F9 0x8338 # <CJK> +0x91FA 0x51E7 # <CJK> +0x91FB 0x86F8 # <CJK> +0x91FC 0x53EA # <CJK> +0x9240 0x53E9 # <CJK> +0x9241 0x4F46 # <CJK> +0x9242 0x9054 # <CJK> +0x9243 0x8FB0 # <CJK> +0x9244 0x596A # <CJK> +0x9245 0x8131 # <CJK> +0x9246 0x5DFD # <CJK> +0x9247 0x7AEA # <CJK> +0x9248 0x8FBF # <CJK> +0x9249 0x68DA # <CJK> +0x924A 0x8C37 # <CJK> +0x924B 0x72F8 # <CJK> +0x924C 0x9C48 # <CJK> +0x924D 0x6A3D # <CJK> +0x924E 0x8AB0 # <CJK> +0x924F 0x4E39 # <CJK> +0x9250 0x5358 # <CJK> +0x9251 0x5606 # <CJK> +0x9252 0x5766 # <CJK> +0x9253 0x62C5 # <CJK> +0x9254 0x63A2 # <CJK> +0x9255 0x65E6 # <CJK> +0x9256 0x6B4E # <CJK> +0x9257 0x6DE1 # <CJK> +0x9258 0x6E5B # <CJK> +0x9259 0x70AD # <CJK> +0x925A 0x77ED # <CJK> +0x925B 0x7AEF # <CJK> +0x925C 0x7BAA # <CJK> +0x925D 0x7DBB # <CJK> +0x925E 0x803D # <CJK> +0x925F 0x80C6 # <CJK> +0x9260 0x86CB # <CJK> +0x9261 0x8A95 # <CJK> +0x9262 0x935B # <CJK> +0x9263 0x56E3 # <CJK> +0x9264 0x58C7 # <CJK> +0x9265 0x5F3E # <CJK> +0x9266 0x65AD # <CJK> +0x9267 0x6696 # <CJK> +0x9268 0x6A80 # <CJK> +0x9269 0x6BB5 # <CJK> +0x926A 0x7537 # <CJK> +0x926B 0x8AC7 # <CJK> +0x926C 0x5024 # <CJK> +0x926D 0x77E5 # <CJK> +0x926E 0x5730 # <CJK> +0x926F 0x5F1B # <CJK> +0x9270 0x6065 # <CJK> +0x9271 0x667A # <CJK> +0x9272 0x6C60 # <CJK> +0x9273 0x75F4 # <CJK> +0x9274 0x7A1A # <CJK> +0x9275 0x7F6E # <CJK> +0x9276 0x81F4 # <CJK> +0x9277 0x8718 # <CJK> +0x9278 0x9045 # <CJK> +0x9279 0x99B3 # <CJK> +0x927A 0x7BC9 # <CJK> +0x927B 0x755C # <CJK> +0x927C 0x7AF9 # <CJK> +0x927D 0x7B51 # <CJK> +0x927E 0x84C4 # <CJK> +0x9280 0x9010 # <CJK> +0x9281 0x79E9 # <CJK> +0x9282 0x7A92 # <CJK> +0x9283 0x8336 # <CJK> +0x9284 0x5AE1 # <CJK> +0x9285 0x7740 # <CJK> +0x9286 0x4E2D # <CJK> +0x9287 0x4EF2 # <CJK> +0x9288 0x5B99 # <CJK> +0x9289 0x5FE0 # <CJK> +0x928A 0x62BD # <CJK> +0x928B 0x663C # <CJK> +0x928C 0x67F1 # <CJK> +0x928D 0x6CE8 # <CJK> +0x928E 0x866B # <CJK> +0x928F 0x8877 # <CJK> +0x9290 0x8A3B # <CJK> +0x9291 0x914E # <CJK> +0x9292 0x92F3 # <CJK> +0x9293 0x99D0 # <CJK> +0x9294 0x6A17 # <CJK> +0x9295 0x7026 # <CJK> +0x9296 0x732A # <CJK> +0x9297 0x82E7 # <CJK> +0x9298 0x8457 # <CJK> +0x9299 0x8CAF # <CJK> +0x929A 0x4E01 # <CJK> +0x929B 0x5146 # <CJK> +0x929C 0x51CB # <CJK> +0x929D 0x558B # <CJK> +0x929E 0x5BF5 # <CJK> +0x929F 0x5E16 # <CJK> +0x92A0 0x5E33 # <CJK> +0x92A1 0x5E81 # <CJK> +0x92A2 0x5F14 # <CJK> +0x92A3 0x5F35 # <CJK> +0x92A4 0x5F6B # <CJK> +0x92A5 0x5FB4 # <CJK> +0x92A6 0x61F2 # <CJK> +0x92A7 0x6311 # <CJK> +0x92A8 0x66A2 # <CJK> +0x92A9 0x671D # <CJK> +0x92AA 0x6F6E # <CJK> +0x92AB 0x7252 # <CJK> +0x92AC 0x753A # <CJK> +0x92AD 0x773A # <CJK> +0x92AE 0x8074 # <CJK> +0x92AF 0x8139 # <CJK> +0x92B0 0x8178 # <CJK> +0x92B1 0x8776 # <CJK> +0x92B2 0x8ABF # <CJK> +0x92B3 0x8ADC # <CJK> +0x92B4 0x8D85 # <CJK> +0x92B5 0x8DF3 # <CJK> +0x92B6 0x929A # <CJK> +0x92B7 0x9577 # <CJK> +0x92B8 0x9802 # <CJK> +0x92B9 0x9CE5 # <CJK> +0x92BA 0x52C5 # <CJK> +0x92BB 0x6357 # <CJK> +0x92BC 0x76F4 # <CJK> +0x92BD 0x6715 # <CJK> +0x92BE 0x6C88 # <CJK> +0x92BF 0x73CD # <CJK> +0x92C0 0x8CC3 # <CJK> +0x92C1 0x93AE # <CJK> +0x92C2 0x9673 # <CJK> +0x92C3 0x6D25 # <CJK> +0x92C4 0x589C # <CJK> +0x92C5 0x690E # <CJK> +0x92C6 0x69CC # <CJK> +0x92C7 0x8FFD # <CJK> +0x92C8 0x939A # <CJK> +0x92C9 0x75DB # <CJK> +0x92CA 0x901A # <CJK> +0x92CB 0x585A # <CJK> +0x92CC 0x6802 # <CJK> +0x92CD 0x63B4 # <CJK> +0x92CE 0x69FB # <CJK> +0x92CF 0x4F43 # <CJK> +0x92D0 0x6F2C # <CJK> +0x92D1 0x67D8 # <CJK> +0x92D2 0x8FBB # <CJK> +0x92D3 0x8526 # <CJK> +0x92D4 0x7DB4 # <CJK> +0x92D5 0x9354 # <CJK> +0x92D6 0x693F # <CJK> +0x92D7 0x6F70 # <CJK> +0x92D8 0x576A # <CJK> +0x92D9 0x58F7 # <CJK> +0x92DA 0x5B2C # <CJK> +0x92DB 0x7D2C # <CJK> +0x92DC 0x722A # <CJK> +0x92DD 0x540A # <CJK> +0x92DE 0x91E3 # <CJK> +0x92DF 0x9DB4 # <CJK> +0x92E0 0x4EAD # <CJK> +0x92E1 0x4F4E # <CJK> +0x92E2 0x505C # <CJK> +0x92E3 0x5075 # <CJK> +0x92E4 0x5243 # <CJK> +0x92E5 0x8C9E # <CJK> +0x92E6 0x5448 # <CJK> +0x92E7 0x5824 # <CJK> +0x92E8 0x5B9A # <CJK> +0x92E9 0x5E1D # <CJK> +0x92EA 0x5E95 # <CJK> +0x92EB 0x5EAD # <CJK> +0x92EC 0x5EF7 # <CJK> +0x92ED 0x5F1F # <CJK> +0x92EE 0x608C # <CJK> +0x92EF 0x62B5 # <CJK> +0x92F0 0x633A # <CJK> +0x92F1 0x63D0 # <CJK> +0x92F2 0x68AF # <CJK> +0x92F3 0x6C40 # <CJK> +0x92F4 0x7887 # <CJK> +0x92F5 0x798E # <CJK> +0x92F6 0x7A0B # <CJK> +0x92F7 0x7DE0 # <CJK> +0x92F8 0x8247 # <CJK> +0x92F9 0x8A02 # <CJK> +0x92FA 0x8AE6 # <CJK> +0x92FB 0x8E44 # <CJK> +0x92FC 0x9013 # <CJK> +0x9340 0x90B8 # <CJK> +0x9341 0x912D # <CJK> +0x9342 0x91D8 # <CJK> +0x9343 0x9F0E # <CJK> +0x9344 0x6CE5 # <CJK> +0x9345 0x6458 # <CJK> +0x9346 0x64E2 # <CJK> +0x9347 0x6575 # <CJK> +0x9348 0x6EF4 # <CJK> +0x9349 0x7684 # <CJK> +0x934A 0x7B1B # <CJK> +0x934B 0x9069 # <CJK> +0x934C 0x93D1 # <CJK> +0x934D 0x6EBA # <CJK> +0x934E 0x54F2 # <CJK> +0x934F 0x5FB9 # <CJK> +0x9350 0x64A4 # <CJK> +0x9351 0x8F4D # <CJK> +0x9352 0x8FED # <CJK> +0x9353 0x9244 # <CJK> +0x9354 0x5178 # <CJK> +0x9355 0x586B # <CJK> +0x9356 0x5929 # <CJK> +0x9357 0x5C55 # <CJK> +0x9358 0x5E97 # <CJK> +0x9359 0x6DFB # <CJK> +0x935A 0x7E8F # <CJK> +0x935B 0x751C # <CJK> +0x935C 0x8CBC # <CJK> +0x935D 0x8EE2 # <CJK> +0x935E 0x985B # <CJK> +0x935F 0x70B9 # <CJK> +0x9360 0x4F1D # <CJK> +0x9361 0x6BBF # <CJK> +0x9362 0x6FB1 # <CJK> +0x9363 0x7530 # <CJK> +0x9364 0x96FB # <CJK> +0x9365 0x514E # <CJK> +0x9366 0x5410 # <CJK> +0x9367 0x5835 # <CJK> +0x9368 0x5857 # <CJK> +0x9369 0x59AC # <CJK> +0x936A 0x5C60 # <CJK> +0x936B 0x5F92 # <CJK> +0x936C 0x6597 # <CJK> +0x936D 0x675C # <CJK> +0x936E 0x6E21 # <CJK> +0x936F 0x767B # <CJK> +0x9370 0x83DF # <CJK> +0x9371 0x8CED # <CJK> +0x9372 0x9014 # <CJK> +0x9373 0x90FD # <CJK> +0x9374 0x934D # <CJK> +0x9375 0x7825 # <CJK> +0x9376 0x783A # <CJK> +0x9377 0x52AA # <CJK> +0x9378 0x5EA6 # <CJK> +0x9379 0x571F # <CJK> +0x937A 0x5974 # <CJK> +0x937B 0x6012 # <CJK> +0x937C 0x5012 # <CJK> +0x937D 0x515A # <CJK> +0x937E 0x51AC # <CJK> +0x9380 0x51CD # <CJK> +0x9381 0x5200 # <CJK> +0x9382 0x5510 # <CJK> +0x9383 0x5854 # <CJK> +0x9384 0x5858 # <CJK> +0x9385 0x5957 # <CJK> +0x9386 0x5B95 # <CJK> +0x9387 0x5CF6 # <CJK> +0x9388 0x5D8B # <CJK> +0x9389 0x60BC # <CJK> +0x938A 0x6295 # <CJK> +0x938B 0x642D # <CJK> +0x938C 0x6771 # <CJK> +0x938D 0x6843 # <CJK> +0x938E 0x68BC # <CJK> +0x938F 0x68DF # <CJK> +0x9390 0x76D7 # <CJK> +0x9391 0x6DD8 # <CJK> +0x9392 0x6E6F # <CJK> +0x9393 0x6D9B # <CJK> +0x9394 0x706F # <CJK> +0x9395 0x71C8 # <CJK> +0x9396 0x5F53 # <CJK> +0x9397 0x75D8 # <CJK> +0x9398 0x7977 # <CJK> +0x9399 0x7B49 # <CJK> +0x939A 0x7B54 # <CJK> +0x939B 0x7B52 # <CJK> +0x939C 0x7CD6 # <CJK> +0x939D 0x7D71 # <CJK> +0x939E 0x5230 # <CJK> +0x939F 0x8463 # <CJK> +0x93A0 0x8569 # <CJK> +0x93A1 0x85E4 # <CJK> +0x93A2 0x8A0E # <CJK> +0x93A3 0x8B04 # <CJK> +0x93A4 0x8C46 # <CJK> +0x93A5 0x8E0F # <CJK> +0x93A6 0x9003 # <CJK> +0x93A7 0x900F # <CJK> +0x93A8 0x9419 # <CJK> +0x93A9 0x9676 # <CJK> +0x93AA 0x982D # <CJK> +0x93AB 0x9A30 # <CJK> +0x93AC 0x95D8 # <CJK> +0x93AD 0x50CD # <CJK> +0x93AE 0x52D5 # <CJK> +0x93AF 0x540C # <CJK> +0x93B0 0x5802 # <CJK> +0x93B1 0x5C0E # <CJK> +0x93B2 0x61A7 # <CJK> +0x93B3 0x649E # <CJK> +0x93B4 0x6D1E # <CJK> +0x93B5 0x77B3 # <CJK> +0x93B6 0x7AE5 # <CJK> +0x93B7 0x80F4 # <CJK> +0x93B8 0x8404 # <CJK> +0x93B9 0x9053 # <CJK> +0x93BA 0x9285 # <CJK> +0x93BB 0x5CE0 # <CJK> +0x93BC 0x9D07 # <CJK> +0x93BD 0x533F # <CJK> +0x93BE 0x5F97 # <CJK> +0x93BF 0x5FB3 # <CJK> +0x93C0 0x6D9C # <CJK> +0x93C1 0x7279 # <CJK> +0x93C2 0x7763 # <CJK> +0x93C3 0x79BF # <CJK> +0x93C4 0x7BE4 # <CJK> +0x93C5 0x6BD2 # <CJK> +0x93C6 0x72EC # <CJK> +0x93C7 0x8AAD # <CJK> +0x93C8 0x6803 # <CJK> +0x93C9 0x6A61 # <CJK> +0x93CA 0x51F8 # <CJK> +0x93CB 0x7A81 # <CJK> +0x93CC 0x6934 # <CJK> +0x93CD 0x5C4A # <CJK> +0x93CE 0x9CF6 # <CJK> +0x93CF 0x82EB # <CJK> +0x93D0 0x5BC5 # <CJK> +0x93D1 0x9149 # <CJK> +0x93D2 0x701E # <CJK> +0x93D3 0x5678 # <CJK> +0x93D4 0x5C6F # <CJK> +0x93D5 0x60C7 # <CJK> +0x93D6 0x6566 # <CJK> +0x93D7 0x6C8C # <CJK> +0x93D8 0x8C5A # <CJK> +0x93D9 0x9041 # <CJK> +0x93DA 0x9813 # <CJK> +0x93DB 0x5451 # <CJK> +0x93DC 0x66C7 # <CJK> +0x93DD 0x920D # <CJK> +0x93DE 0x5948 # <CJK> +0x93DF 0x90A3 # <CJK> +0x93E0 0x5185 # <CJK> +0x93E1 0x4E4D # <CJK> +0x93E2 0x51EA # <CJK> +0x93E3 0x8599 # <CJK> +0x93E4 0x8B0E # <CJK> +0x93E5 0x7058 # <CJK> +0x93E6 0x637A # <CJK> +0x93E7 0x934B # <CJK> +0x93E8 0x6962 # <CJK> +0x93E9 0x99B4 # <CJK> +0x93EA 0x7E04 # <CJK> +0x93EB 0x7577 # <CJK> +0x93EC 0x5357 # <CJK> +0x93ED 0x6960 # <CJK> +0x93EE 0x8EDF # <CJK> +0x93EF 0x96E3 # <CJK> +0x93F0 0x6C5D # <CJK> +0x93F1 0x4E8C # <CJK> +0x93F2 0x5C3C # <CJK> +0x93F3 0x5F10 # <CJK> +0x93F4 0x8FE9 # <CJK> +0x93F5 0x5302 # <CJK> +0x93F6 0x8CD1 # <CJK> +0x93F7 0x8089 # <CJK> +0x93F8 0x8679 # <CJK> +0x93F9 0x5EFF # <CJK> +0x93FA 0x65E5 # <CJK> +0x93FB 0x4E73 # <CJK> +0x93FC 0x5165 # <CJK> +0x9440 0x5982 # <CJK> +0x9441 0x5C3F # <CJK> +0x9442 0x97EE # <CJK> +0x9443 0x4EFB # <CJK> +0x9444 0x598A # <CJK> +0x9445 0x5FCD # <CJK> +0x9446 0x8A8D # <CJK> +0x9447 0x6FE1 # <CJK> +0x9448 0x79B0 # <CJK> +0x9449 0x7962 # <CJK> +0x944A 0x5BE7 # <CJK> +0x944B 0x8471 # <CJK> +0x944C 0x732B # <CJK> +0x944D 0x71B1 # <CJK> +0x944E 0x5E74 # <CJK> +0x944F 0x5FF5 # <CJK> +0x9450 0x637B # <CJK> +0x9451 0x649A # <CJK> +0x9452 0x71C3 # <CJK> +0x9453 0x7C98 # <CJK> +0x9454 0x4E43 # <CJK> +0x9455 0x5EFC # <CJK> +0x9456 0x4E4B # <CJK> +0x9457 0x57DC # <CJK> +0x9458 0x56A2 # <CJK> +0x9459 0x60A9 # <CJK> +0x945A 0x6FC3 # <CJK> +0x945B 0x7D0D # <CJK> +0x945C 0x80FD # <CJK> +0x945D 0x8133 # <CJK> +0x945E 0x81BF # <CJK> +0x945F 0x8FB2 # <CJK> +0x9460 0x8997 # <CJK> +0x9461 0x86A4 # <CJK> +0x9462 0x5DF4 # <CJK> +0x9463 0x628A # <CJK> +0x9464 0x64AD # <CJK> +0x9465 0x8987 # <CJK> +0x9466 0x6777 # <CJK> +0x9467 0x6CE2 # <CJK> +0x9468 0x6D3E # <CJK> +0x9469 0x7436 # <CJK> +0x946A 0x7834 # <CJK> +0x946B 0x5A46 # <CJK> +0x946C 0x7F75 # <CJK> +0x946D 0x82AD # <CJK> +0x946E 0x99AC # <CJK> +0x946F 0x4FF3 # <CJK> +0x9470 0x5EC3 # <CJK> +0x9471 0x62DD # <CJK> +0x9472 0x6392 # <CJK> +0x9473 0x6557 # <CJK> +0x9474 0x676F # <CJK> +0x9475 0x76C3 # <CJK> +0x9476 0x724C # <CJK> +0x9477 0x80CC # <CJK> +0x9478 0x80BA # <CJK> +0x9479 0x8F29 # <CJK> +0x947A 0x914D # <CJK> +0x947B 0x500D # <CJK> +0x947C 0x57F9 # <CJK> +0x947D 0x5A92 # <CJK> +0x947E 0x6885 # <CJK> +0x9480 0x6973 # <CJK> +0x9481 0x7164 # <CJK> +0x9482 0x72FD # <CJK> +0x9483 0x8CB7 # <CJK> +0x9484 0x58F2 # <CJK> +0x9485 0x8CE0 # <CJK> +0x9486 0x966A # <CJK> +0x9487 0x9019 # <CJK> +0x9488 0x877F # <CJK> +0x9489 0x79E4 # <CJK> +0x948A 0x77E7 # <CJK> +0x948B 0x8429 # <CJK> +0x948C 0x4F2F # <CJK> +0x948D 0x5265 # <CJK> +0x948E 0x535A # <CJK> +0x948F 0x62CD # <CJK> +0x9490 0x67CF # <CJK> +0x9491 0x6CCA # <CJK> +0x9492 0x767D # <CJK> +0x9493 0x7B94 # <CJK> +0x9494 0x7C95 # <CJK> +0x9495 0x8236 # <CJK> +0x9496 0x8584 # <CJK> +0x9497 0x8FEB # <CJK> +0x9498 0x66DD # <CJK> +0x9499 0x6F20 # <CJK> +0x949A 0x7206 # <CJK> +0x949B 0x7E1B # <CJK> +0x949C 0x83AB # <CJK> +0x949D 0x99C1 # <CJK> +0x949E 0x9EA6 # <CJK> +0x949F 0x51FD # <CJK> +0x94A0 0x7BB1 # <CJK> +0x94A1 0x7872 # <CJK> +0x94A2 0x7BB8 # <CJK> +0x94A3 0x8087 # <CJK> +0x94A4 0x7B48 # <CJK> +0x94A5 0x6AE8 # <CJK> +0x94A6 0x5E61 # <CJK> +0x94A7 0x808C # <CJK> +0x94A8 0x7551 # <CJK> +0x94A9 0x7560 # <CJK> +0x94AA 0x516B # <CJK> +0x94AB 0x9262 # <CJK> +0x94AC 0x6E8C # <CJK> +0x94AD 0x767A # <CJK> +0x94AE 0x9197 # <CJK> +0x94AF 0x9AEA # <CJK> +0x94B0 0x4F10 # <CJK> +0x94B1 0x7F70 # <CJK> +0x94B2 0x629C # <CJK> +0x94B3 0x7B4F # <CJK> +0x94B4 0x95A5 # <CJK> +0x94B5 0x9CE9 # <CJK> +0x94B6 0x567A # <CJK> +0x94B7 0x5859 # <CJK> +0x94B8 0x86E4 # <CJK> +0x94B9 0x96BC # <CJK> +0x94BA 0x4F34 # <CJK> +0x94BB 0x5224 # <CJK> +0x94BC 0x534A # <CJK> +0x94BD 0x53CD # <CJK> +0x94BE 0x53DB # <CJK> +0x94BF 0x5E06 # <CJK> +0x94C0 0x642C # <CJK> +0x94C1 0x6591 # <CJK> +0x94C2 0x677F # <CJK> +0x94C3 0x6C3E # <CJK> +0x94C4 0x6C4E # <CJK> +0x94C5 0x7248 # <CJK> +0x94C6 0x72AF # <CJK> +0x94C7 0x73ED # <CJK> +0x94C8 0x7554 # <CJK> +0x94C9 0x7E41 # <CJK> +0x94CA 0x822C # <CJK> +0x94CB 0x85E9 # <CJK> +0x94CC 0x8CA9 # <CJK> +0x94CD 0x7BC4 # <CJK> +0x94CE 0x91C6 # <CJK> +0x94CF 0x7169 # <CJK> +0x94D0 0x9812 # <CJK> +0x94D1 0x98EF # <CJK> +0x94D2 0x633D # <CJK> +0x94D3 0x6669 # <CJK> +0x94D4 0x756A # <CJK> +0x94D5 0x76E4 # <CJK> +0x94D6 0x78D0 # <CJK> +0x94D7 0x8543 # <CJK> +0x94D8 0x86EE # <CJK> +0x94D9 0x532A # <CJK> +0x94DA 0x5351 # <CJK> +0x94DB 0x5426 # <CJK> +0x94DC 0x5983 # <CJK> +0x94DD 0x5E87 # <CJK> +0x94DE 0x5F7C # <CJK> +0x94DF 0x60B2 # <CJK> +0x94E0 0x6249 # <CJK> +0x94E1 0x6279 # <CJK> +0x94E2 0x62AB # <CJK> +0x94E3 0x6590 # <CJK> +0x94E4 0x6BD4 # <CJK> +0x94E5 0x6CCC # <CJK> +0x94E6 0x75B2 # <CJK> +0x94E7 0x76AE # <CJK> +0x94E8 0x7891 # <CJK> +0x94E9 0x79D8 # <CJK> +0x94EA 0x7DCB # <CJK> +0x94EB 0x7F77 # <CJK> +0x94EC 0x80A5 # <CJK> +0x94ED 0x88AB # <CJK> +0x94EE 0x8AB9 # <CJK> +0x94EF 0x8CBB # <CJK> +0x94F0 0x907F # <CJK> +0x94F1 0x975E # <CJK> +0x94F2 0x98DB # <CJK> +0x94F3 0x6A0B # <CJK> +0x94F4 0x7C38 # <CJK> +0x94F5 0x5099 # <CJK> +0x94F6 0x5C3E # <CJK> +0x94F7 0x5FAE # <CJK> +0x94F8 0x6787 # <CJK> +0x94F9 0x6BD8 # <CJK> +0x94FA 0x7435 # <CJK> +0x94FB 0x7709 # <CJK> +0x94FC 0x7F8E # <CJK> +0x9540 0x9F3B # <CJK> +0x9541 0x67CA # <CJK> +0x9542 0x7A17 # <CJK> +0x9543 0x5339 # <CJK> +0x9544 0x758B # <CJK> +0x9545 0x9AED # <CJK> +0x9546 0x5F66 # <CJK> +0x9547 0x819D # <CJK> +0x9548 0x83F1 # <CJK> +0x9549 0x8098 # <CJK> +0x954A 0x5F3C # <CJK> +0x954B 0x5FC5 # <CJK> +0x954C 0x7562 # <CJK> +0x954D 0x7B46 # <CJK> +0x954E 0x903C # <CJK> +0x954F 0x6867 # <CJK> +0x9550 0x59EB # <CJK> +0x9551 0x5A9B # <CJK> +0x9552 0x7D10 # <CJK> +0x9553 0x767E # <CJK> +0x9554 0x8B2C # <CJK> +0x9555 0x4FF5 # <CJK> +0x9556 0x5F6A # <CJK> +0x9557 0x6A19 # <CJK> +0x9558 0x6C37 # <CJK> +0x9559 0x6F02 # <CJK> +0x955A 0x74E2 # <CJK> +0x955B 0x7968 # <CJK> +0x955C 0x8868 # <CJK> +0x955D 0x8A55 # <CJK> +0x955E 0x8C79 # <CJK> +0x955F 0x5EDF # <CJK> +0x9560 0x63CF # <CJK> +0x9561 0x75C5 # <CJK> +0x9562 0x79D2 # <CJK> +0x9563 0x82D7 # <CJK> +0x9564 0x9328 # <CJK> +0x9565 0x92F2 # <CJK> +0x9566 0x849C # <CJK> +0x9567 0x86ED # <CJK> +0x9568 0x9C2D # <CJK> +0x9569 0x54C1 # <CJK> +0x956A 0x5F6C # <CJK> +0x956B 0x658C # <CJK> +0x956C 0x6D5C # <CJK> +0x956D 0x7015 # <CJK> +0x956E 0x8CA7 # <CJK> +0x956F 0x8CD3 # <CJK> +0x9570 0x983B # <CJK> +0x9571 0x654F # <CJK> +0x9572 0x74F6 # <CJK> +0x9573 0x4E0D # <CJK> +0x9574 0x4ED8 # <CJK> +0x9575 0x57E0 # <CJK> +0x9576 0x592B # <CJK> +0x9577 0x5A66 # <CJK> +0x9578 0x5BCC # <CJK> +0x9579 0x51A8 # <CJK> +0x957A 0x5E03 # <CJK> +0x957B 0x5E9C # <CJK> +0x957C 0x6016 # <CJK> +0x957D 0x6276 # <CJK> +0x957E 0x6577 # <CJK> +0x9580 0x65A7 # <CJK> +0x9581 0x666E # <CJK> +0x9582 0x6D6E # <CJK> +0x9583 0x7236 # <CJK> +0x9584 0x7B26 # <CJK> +0x9585 0x8150 # <CJK> +0x9586 0x819A # <CJK> +0x9587 0x8299 # <CJK> +0x9588 0x8B5C # <CJK> +0x9589 0x8CA0 # <CJK> +0x958A 0x8CE6 # <CJK> +0x958B 0x8D74 # <CJK> +0x958C 0x961C # <CJK> +0x958D 0x9644 # <CJK> +0x958E 0x4FAE # <CJK> +0x958F 0x64AB # <CJK> +0x9590 0x6B66 # <CJK> +0x9591 0x821E # <CJK> +0x9592 0x8461 # <CJK> +0x9593 0x856A # <CJK> +0x9594 0x90E8 # <CJK> +0x9595 0x5C01 # <CJK> +0x9596 0x6953 # <CJK> +0x9597 0x98A8 # <CJK> +0x9598 0x847A # <CJK> +0x9599 0x8557 # <CJK> +0x959A 0x4F0F # <CJK> +0x959B 0x526F # <CJK> +0x959C 0x5FA9 # <CJK> +0x959D 0x5E45 # <CJK> +0x959E 0x670D # <CJK> +0x959F 0x798F # <CJK> +0x95A0 0x8179 # <CJK> +0x95A1 0x8907 # <CJK> +0x95A2 0x8986 # <CJK> +0x95A3 0x6DF5 # <CJK> +0x95A4 0x5F17 # <CJK> +0x95A5 0x6255 # <CJK> +0x95A6 0x6CB8 # <CJK> +0x95A7 0x4ECF # <CJK> +0x95A8 0x7269 # <CJK> +0x95A9 0x9B92 # <CJK> +0x95AA 0x5206 # <CJK> +0x95AB 0x543B # <CJK> +0x95AC 0x5674 # <CJK> +0x95AD 0x58B3 # <CJK> +0x95AE 0x61A4 # <CJK> +0x95AF 0x626E # <CJK> +0x95B0 0x711A # <CJK> +0x95B1 0x596E # <CJK> +0x95B2 0x7C89 # <CJK> +0x95B3 0x7CDE # <CJK> +0x95B4 0x7D1B # <CJK> +0x95B5 0x96F0 # <CJK> +0x95B6 0x6587 # <CJK> +0x95B7 0x805E # <CJK> +0x95B8 0x4E19 # <CJK> +0x95B9 0x4F75 # <CJK> +0x95BA 0x5175 # <CJK> +0x95BB 0x5840 # <CJK> +0x95BC 0x5E63 # <CJK> +0x95BD 0x5E73 # <CJK> +0x95BE 0x5F0A # <CJK> +0x95BF 0x67C4 # <CJK> +0x95C0 0x4E26 # <CJK> +0x95C1 0x853D # <CJK> +0x95C2 0x9589 # <CJK> +0x95C3 0x965B # <CJK> +0x95C4 0x7C73 # <CJK> +0x95C5 0x9801 # <CJK> +0x95C6 0x50FB # <CJK> +0x95C7 0x58C1 # <CJK> +0x95C8 0x7656 # <CJK> +0x95C9 0x78A7 # <CJK> +0x95CA 0x5225 # <CJK> +0x95CB 0x77A5 # <CJK> +0x95CC 0x8511 # <CJK> +0x95CD 0x7B86 # <CJK> +0x95CE 0x504F # <CJK> +0x95CF 0x5909 # <CJK> +0x95D0 0x7247 # <CJK> +0x95D1 0x7BC7 # <CJK> +0x95D2 0x7DE8 # <CJK> +0x95D3 0x8FBA # <CJK> +0x95D4 0x8FD4 # <CJK> +0x95D5 0x904D # <CJK> +0x95D6 0x4FBF # <CJK> +0x95D7 0x52C9 # <CJK> +0x95D8 0x5A29 # <CJK> +0x95D9 0x5F01 # <CJK> +0x95DA 0x97AD # <CJK> +0x95DB 0x4FDD # <CJK> +0x95DC 0x8217 # <CJK> +0x95DD 0x92EA # <CJK> +0x95DE 0x5703 # <CJK> +0x95DF 0x6355 # <CJK> +0x95E0 0x6B69 # <CJK> +0x95E1 0x752B # <CJK> +0x95E2 0x88DC # <CJK> +0x95E3 0x8F14 # <CJK> +0x95E4 0x7A42 # <CJK> +0x95E5 0x52DF # <CJK> +0x95E6 0x5893 # <CJK> +0x95E7 0x6155 # <CJK> +0x95E8 0x620A # <CJK> +0x95E9 0x66AE # <CJK> +0x95EA 0x6BCD # <CJK> +0x95EB 0x7C3F # <CJK> +0x95EC 0x83E9 # <CJK> +0x95ED 0x5023 # <CJK> +0x95EE 0x4FF8 # <CJK> +0x95EF 0x5305 # <CJK> +0x95F0 0x5446 # <CJK> +0x95F1 0x5831 # <CJK> +0x95F2 0x5949 # <CJK> +0x95F3 0x5B9D # <CJK> +0x95F4 0x5CF0 # <CJK> +0x95F5 0x5CEF # <CJK> +0x95F6 0x5D29 # <CJK> +0x95F7 0x5E96 # <CJK> +0x95F8 0x62B1 # <CJK> +0x95F9 0x6367 # <CJK> +0x95FA 0x653E # <CJK> +0x95FB 0x65B9 # <CJK> +0x95FC 0x670B # <CJK> +0x9640 0x6CD5 # <CJK> +0x9641 0x6CE1 # <CJK> +0x9642 0x70F9 # <CJK> +0x9643 0x7832 # <CJK> +0x9644 0x7E2B # <CJK> +0x9645 0x80DE # <CJK> +0x9646 0x82B3 # <CJK> +0x9647 0x840C # <CJK> +0x9648 0x84EC # <CJK> +0x9649 0x8702 # <CJK> +0x964A 0x8912 # <CJK> +0x964B 0x8A2A # <CJK> +0x964C 0x8C4A # <CJK> +0x964D 0x90A6 # <CJK> +0x964E 0x92D2 # <CJK> +0x964F 0x98FD # <CJK> +0x9650 0x9CF3 # <CJK> +0x9651 0x9D6C # <CJK> +0x9652 0x4E4F # <CJK> +0x9653 0x4EA1 # <CJK> +0x9654 0x508D # <CJK> +0x9655 0x5256 # <CJK> +0x9656 0x574A # <CJK> +0x9657 0x59A8 # <CJK> +0x9658 0x5E3D # <CJK> +0x9659 0x5FD8 # <CJK> +0x965A 0x5FD9 # <CJK> +0x965B 0x623F # <CJK> +0x965C 0x66B4 # <CJK> +0x965D 0x671B # <CJK> +0x965E 0x67D0 # <CJK> +0x965F 0x68D2 # <CJK> +0x9660 0x5192 # <CJK> +0x9661 0x7D21 # <CJK> +0x9662 0x80AA # <CJK> +0x9663 0x81A8 # <CJK> +0x9664 0x8B00 # <CJK> +0x9665 0x8C8C # <CJK> +0x9666 0x8CBF # <CJK> +0x9667 0x927E # <CJK> +0x9668 0x9632 # <CJK> +0x9669 0x5420 # <CJK> +0x966A 0x982C # <CJK> +0x966B 0x5317 # <CJK> +0x966C 0x50D5 # <CJK> +0x966D 0x535C # <CJK> +0x966E 0x58A8 # <CJK> +0x966F 0x64B2 # <CJK> +0x9670 0x6734 # <CJK> +0x9671 0x7267 # <CJK> +0x9672 0x7766 # <CJK> +0x9673 0x7A46 # <CJK> +0x9674 0x91E6 # <CJK> +0x9675 0x52C3 # <CJK> +0x9676 0x6CA1 # <CJK> +0x9677 0x6B86 # <CJK> +0x9678 0x5800 # <CJK> +0x9679 0x5E4C # <CJK> +0x967A 0x5954 # <CJK> +0x967B 0x672C # <CJK> +0x967C 0x7FFB # <CJK> +0x967D 0x51E1 # <CJK> +0x967E 0x76C6 # <CJK> +0x9680 0x6469 # <CJK> +0x9681 0x78E8 # <CJK> +0x9682 0x9B54 # <CJK> +0x9683 0x9EBB # <CJK> +0x9684 0x57CB # <CJK> +0x9685 0x59B9 # <CJK> +0x9686 0x6627 # <CJK> +0x9687 0x679A # <CJK> +0x9688 0x6BCE # <CJK> +0x9689 0x54E9 # <CJK> +0x968A 0x69D9 # <CJK> +0x968B 0x5E55 # <CJK> +0x968C 0x819C # <CJK> +0x968D 0x6795 # <CJK> +0x968E 0x9BAA # <CJK> +0x968F 0x67FE # <CJK> +0x9690 0x9C52 # <CJK> +0x9691 0x685D # <CJK> +0x9692 0x4EA6 # <CJK> +0x9693 0x4FE3 # <CJK> +0x9694 0x53C8 # <CJK> +0x9695 0x62B9 # <CJK> +0x9696 0x672B # <CJK> +0x9697 0x6CAB # <CJK> +0x9698 0x8FC4 # <CJK> +0x9699 0x4FAD # <CJK> +0x969A 0x7E6D # <CJK> +0x969B 0x9EBF # <CJK> +0x969C 0x4E07 # <CJK> +0x969D 0x6162 # <CJK> +0x969E 0x6E80 # <CJK> +0x969F 0x6F2B # <CJK> +0x96A0 0x8513 # <CJK> +0x96A1 0x5473 # <CJK> +0x96A2 0x672A # <CJK> +0x96A3 0x9B45 # <CJK> +0x96A4 0x5DF3 # <CJK> +0x96A5 0x7B95 # <CJK> +0x96A6 0x5CAC # <CJK> +0x96A7 0x5BC6 # <CJK> +0x96A8 0x871C # <CJK> +0x96A9 0x6E4A # <CJK> +0x96AA 0x84D1 # <CJK> +0x96AB 0x7A14 # <CJK> +0x96AC 0x8108 # <CJK> +0x96AD 0x5999 # <CJK> +0x96AE 0x7C8D # <CJK> +0x96AF 0x6C11 # <CJK> +0x96B0 0x7720 # <CJK> +0x96B1 0x52D9 # <CJK> +0x96B2 0x5922 # <CJK> +0x96B3 0x7121 # <CJK> +0x96B4 0x725F # <CJK> +0x96B5 0x77DB # <CJK> +0x96B6 0x9727 # <CJK> +0x96B7 0x9D61 # <CJK> +0x96B8 0x690B # <CJK> +0x96B9 0x5A7F # <CJK> +0x96BA 0x5A18 # <CJK> +0x96BB 0x51A5 # <CJK> +0x96BC 0x540D # <CJK> +0x96BD 0x547D # <CJK> +0x96BE 0x660E # <CJK> +0x96BF 0x76DF # <CJK> +0x96C0 0x8FF7 # <CJK> +0x96C1 0x9298 # <CJK> +0x96C2 0x9CF4 # <CJK> +0x96C3 0x59EA # <CJK> +0x96C4 0x725D # <CJK> +0x96C5 0x6EC5 # <CJK> +0x96C6 0x514D # <CJK> +0x96C7 0x68C9 # <CJK> +0x96C8 0x7DBF # <CJK> +0x96C9 0x7DEC # <CJK> +0x96CA 0x9762 # <CJK> +0x96CB 0x9EBA # <CJK> +0x96CC 0x6478 # <CJK> +0x96CD 0x6A21 # <CJK> +0x96CE 0x8302 # <CJK> +0x96CF 0x5984 # <CJK> +0x96D0 0x5B5F # <CJK> +0x96D1 0x6BDB # <CJK> +0x96D2 0x731B # <CJK> +0x96D3 0x76F2 # <CJK> +0x96D4 0x7DB2 # <CJK> +0x96D5 0x8017 # <CJK> +0x96D6 0x8499 # <CJK> +0x96D7 0x5132 # <CJK> +0x96D8 0x6728 # <CJK> +0x96D9 0x9ED9 # <CJK> +0x96DA 0x76EE # <CJK> +0x96DB 0x6762 # <CJK> +0x96DC 0x52FF # <CJK> +0x96DD 0x9905 # <CJK> +0x96DE 0x5C24 # <CJK> +0x96DF 0x623B # <CJK> +0x96E0 0x7C7E # <CJK> +0x96E1 0x8CB0 # <CJK> +0x96E2 0x554F # <CJK> +0x96E3 0x60B6 # <CJK> +0x96E4 0x7D0B # <CJK> +0x96E5 0x9580 # <CJK> +0x96E6 0x5301 # <CJK> +0x96E7 0x4E5F # <CJK> +0x96E8 0x51B6 # <CJK> +0x96E9 0x591C # <CJK> +0x96EA 0x723A # <CJK> +0x96EB 0x8036 # <CJK> +0x96EC 0x91CE # <CJK> +0x96ED 0x5F25 # <CJK> +0x96EE 0x77E2 # <CJK> +0x96EF 0x5384 # <CJK> +0x96F0 0x5F79 # <CJK> +0x96F1 0x7D04 # <CJK> +0x96F2 0x85AC # <CJK> +0x96F3 0x8A33 # <CJK> +0x96F4 0x8E8D # <CJK> +0x96F5 0x9756 # <CJK> +0x96F6 0x67F3 # <CJK> +0x96F7 0x85AE # <CJK> +0x96F8 0x9453 # <CJK> +0x96F9 0x6109 # <CJK> +0x96FA 0x6108 # <CJK> +0x96FB 0x6CB9 # <CJK> +0x96FC 0x7652 # <CJK> +0x9740 0x8AED # <CJK> +0x9741 0x8F38 # <CJK> +0x9742 0x552F # <CJK> +0x9743 0x4F51 # <CJK> +0x9744 0x512A # <CJK> +0x9745 0x52C7 # <CJK> +0x9746 0x53CB # <CJK> +0x9747 0x5BA5 # <CJK> +0x9748 0x5E7D # <CJK> +0x9749 0x60A0 # <CJK> +0x974A 0x6182 # <CJK> +0x974B 0x63D6 # <CJK> +0x974C 0x6709 # <CJK> +0x974D 0x67DA # <CJK> +0x974E 0x6E67 # <CJK> +0x974F 0x6D8C # <CJK> +0x9750 0x7336 # <CJK> +0x9751 0x7337 # <CJK> +0x9752 0x7531 # <CJK> +0x9753 0x7950 # <CJK> +0x9754 0x88D5 # <CJK> +0x9755 0x8A98 # <CJK> +0x9756 0x904A # <CJK> +0x9757 0x9091 # <CJK> +0x9758 0x90F5 # <CJK> +0x9759 0x96C4 # <CJK> +0x975A 0x878D # <CJK> +0x975B 0x5915 # <CJK> +0x975C 0x4E88 # <CJK> +0x975D 0x4F59 # <CJK> +0x975E 0x4E0E # <CJK> +0x975F 0x8A89 # <CJK> +0x9760 0x8F3F # <CJK> +0x9761 0x9810 # <CJK> +0x9762 0x50AD # <CJK> +0x9763 0x5E7C # <CJK> +0x9764 0x5996 # <CJK> +0x9765 0x5BB9 # <CJK> +0x9766 0x5EB8 # <CJK> +0x9767 0x63DA # <CJK> +0x9768 0x63FA # <CJK> +0x9769 0x64C1 # <CJK> +0x976A 0x66DC # <CJK> +0x976B 0x694A # <CJK> +0x976C 0x69D8 # <CJK> +0x976D 0x6D0B # <CJK> +0x976E 0x6EB6 # <CJK> +0x976F 0x7194 # <CJK> +0x9770 0x7528 # <CJK> +0x9771 0x7AAF # <CJK> +0x9772 0x7F8A # <CJK> +0x9773 0x8000 # <CJK> +0x9774 0x8449 # <CJK> +0x9775 0x84C9 # <CJK> +0x9776 0x8981 # <CJK> +0x9777 0x8B21 # <CJK> +0x9778 0x8E0A # <CJK> +0x9779 0x9065 # <CJK> +0x977A 0x967D # <CJK> +0x977B 0x990A # <CJK> +0x977C 0x617E # <CJK> +0x977D 0x6291 # <CJK> +0x977E 0x6B32 # <CJK> +0x9780 0x6C83 # <CJK> +0x9781 0x6D74 # <CJK> +0x9782 0x7FCC # <CJK> +0x9783 0x7FFC # <CJK> +0x9784 0x6DC0 # <CJK> +0x9785 0x7F85 # <CJK> +0x9786 0x87BA # <CJK> +0x9787 0x88F8 # <CJK> +0x9788 0x6765 # <CJK> +0x9789 0x83B1 # <CJK> +0x978A 0x983C # <CJK> +0x978B 0x96F7 # <CJK> +0x978C 0x6D1B # <CJK> +0x978D 0x7D61 # <CJK> +0x978E 0x843D # <CJK> +0x978F 0x916A # <CJK> +0x9790 0x4E71 # <CJK> +0x9791 0x5375 # <CJK> +0x9792 0x5D50 # <CJK> +0x9793 0x6B04 # <CJK> +0x9794 0x6FEB # <CJK> +0x9795 0x85CD # <CJK> +0x9796 0x862D # <CJK> +0x9797 0x89A7 # <CJK> +0x9798 0x5229 # <CJK> +0x9799 0x540F # <CJK> +0x979A 0x5C65 # <CJK> +0x979B 0x674E # <CJK> +0x979C 0x68A8 # <CJK> +0x979D 0x7406 # <CJK> +0x979E 0x7483 # <CJK> +0x979F 0x75E2 # <CJK> +0x97A0 0x88CF # <CJK> +0x97A1 0x88E1 # <CJK> +0x97A2 0x91CC # <CJK> +0x97A3 0x96E2 # <CJK> +0x97A4 0x9678 # <CJK> +0x97A5 0x5F8B # <CJK> +0x97A6 0x7387 # <CJK> +0x97A7 0x7ACB # <CJK> +0x97A8 0x844E # <CJK> +0x97A9 0x63A0 # <CJK> +0x97AA 0x7565 # <CJK> +0x97AB 0x5289 # <CJK> +0x97AC 0x6D41 # <CJK> +0x97AD 0x6E9C # <CJK> +0x97AE 0x7409 # <CJK> +0x97AF 0x7559 # <CJK> +0x97B0 0x786B # <CJK> +0x97B1 0x7C92 # <CJK> +0x97B2 0x9686 # <CJK> +0x97B3 0x7ADC # <CJK> +0x97B4 0x9F8D # <CJK> +0x97B5 0x4FB6 # <CJK> +0x97B6 0x616E # <CJK> +0x97B7 0x65C5 # <CJK> +0x97B8 0x865C # <CJK> +0x97B9 0x4E86 # <CJK> +0x97BA 0x4EAE # <CJK> +0x97BB 0x50DA # <CJK> +0x97BC 0x4E21 # <CJK> +0x97BD 0x51CC # <CJK> +0x97BE 0x5BEE # <CJK> +0x97BF 0x6599 # <CJK> +0x97C0 0x6881 # <CJK> +0x97C1 0x6DBC # <CJK> +0x97C2 0x731F # <CJK> +0x97C3 0x7642 # <CJK> +0x97C4 0x77AD # <CJK> +0x97C5 0x7A1C # <CJK> +0x97C6 0x7CE7 # <CJK> +0x97C7 0x826F # <CJK> +0x97C8 0x8AD2 # <CJK> +0x97C9 0x907C # <CJK> +0x97CA 0x91CF # <CJK> +0x97CB 0x9675 # <CJK> +0x97CC 0x9818 # <CJK> +0x97CD 0x529B # <CJK> +0x97CE 0x7DD1 # <CJK> +0x97CF 0x502B # <CJK> +0x97D0 0x5398 # <CJK> +0x97D1 0x6797 # <CJK> +0x97D2 0x6DCB # <CJK> +0x97D3 0x71D0 # <CJK> +0x97D4 0x7433 # <CJK> +0x97D5 0x81E8 # <CJK> +0x97D6 0x8F2A # <CJK> +0x97D7 0x96A3 # <CJK> +0x97D8 0x9C57 # <CJK> +0x97D9 0x9E9F # <CJK> +0x97DA 0x7460 # <CJK> +0x97DB 0x5841 # <CJK> +0x97DC 0x6D99 # <CJK> +0x97DD 0x7D2F # <CJK> +0x97DE 0x985E # <CJK> +0x97DF 0x4EE4 # <CJK> +0x97E0 0x4F36 # <CJK> +0x97E1 0x4F8B # <CJK> +0x97E2 0x51B7 # <CJK> +0x97E3 0x52B1 # <CJK> +0x97E4 0x5DBA # <CJK> +0x97E5 0x601C # <CJK> +0x97E6 0x73B2 # <CJK> +0x97E7 0x793C # <CJK> +0x97E8 0x82D3 # <CJK> +0x97E9 0x9234 # <CJK> +0x97EA 0x96B7 # <CJK> +0x97EB 0x96F6 # <CJK> +0x97EC 0x970A # <CJK> +0x97ED 0x9E97 # <CJK> +0x97EE 0x9F62 # <CJK> +0x97EF 0x66A6 # <CJK> +0x97F0 0x6B74 # <CJK> +0x97F1 0x5217 # <CJK> +0x97F2 0x52A3 # <CJK> +0x97F3 0x70C8 # <CJK> +0x97F4 0x88C2 # <CJK> +0x97F5 0x5EC9 # <CJK> +0x97F6 0x604B # <CJK> +0x97F7 0x6190 # <CJK> +0x97F8 0x6F23 # <CJK> +0x97F9 0x7149 # <CJK> +0x97FA 0x7C3E # <CJK> +0x97FB 0x7DF4 # <CJK> +0x97FC 0x806F # <CJK> +0x9840 0x84EE # <CJK> +0x9841 0x9023 # <CJK> +0x9842 0x932C # <CJK> +0x9843 0x5442 # <CJK> +0x9844 0x9B6F # <CJK> +0x9845 0x6AD3 # <CJK> +0x9846 0x7089 # <CJK> +0x9847 0x8CC2 # <CJK> +0x9848 0x8DEF # <CJK> +0x9849 0x9732 # <CJK> +0x984A 0x52B4 # <CJK> +0x984B 0x5A41 # <CJK> +0x984C 0x5ECA # <CJK> +0x984D 0x5F04 # <CJK> +0x984E 0x6717 # <CJK> +0x984F 0x697C # <CJK> +0x9850 0x6994 # <CJK> +0x9851 0x6D6A # <CJK> +0x9852 0x6F0F # <CJK> +0x9853 0x7262 # <CJK> +0x9854 0x72FC # <CJK> +0x9855 0x7BED # <CJK> +0x9856 0x8001 # <CJK> +0x9857 0x807E # <CJK> +0x9858 0x874B # <CJK> +0x9859 0x90CE # <CJK> +0x985A 0x516D # <CJK> +0x985B 0x9E93 # <CJK> +0x985C 0x7984 # <CJK> +0x985D 0x808B # <CJK> +0x985E 0x9332 # <CJK> +0x985F 0x8AD6 # <CJK> +0x9860 0x502D # <CJK> +0x9861 0x548C # <CJK> +0x9862 0x8A71 # <CJK> +0x9863 0x6B6A # <CJK> +0x9864 0x8CC4 # <CJK> +0x9865 0x8107 # <CJK> +0x9866 0x60D1 # <CJK> +0x9867 0x67A0 # <CJK> +0x9868 0x9DF2 # <CJK> +0x9869 0x4E99 # <CJK> +0x986A 0x4E98 # <CJK> +0x986B 0x9C10 # <CJK> +0x986C 0x8A6B # <CJK> +0x986D 0x85C1 # <CJK> +0x986E 0x8568 # <CJK> +0x986F 0x6900 # <CJK> +0x9870 0x6E7E # <CJK> +0x9871 0x7897 # <CJK> +0x9872 0x8155 # <CJK> +0x989F 0x5F0C # <CJK> +0x98A0 0x4E10 # <CJK> +0x98A1 0x4E15 # <CJK> +0x98A2 0x4E2A # <CJK> +0x98A3 0x4E31 # <CJK> +0x98A4 0x4E36 # <CJK> +0x98A5 0x4E3C # <CJK> +0x98A6 0x4E3F # <CJK> +0x98A7 0x4E42 # <CJK> +0x98A8 0x4E56 # <CJK> +0x98A9 0x4E58 # <CJK> +0x98AA 0x4E82 # <CJK> +0x98AB 0x4E85 # <CJK> +0x98AC 0x8C6B # <CJK> +0x98AD 0x4E8A # <CJK> +0x98AE 0x8212 # <CJK> +0x98AF 0x5F0D # <CJK> +0x98B0 0x4E8E # <CJK> +0x98B1 0x4E9E # <CJK> +0x98B2 0x4E9F # <CJK> +0x98B3 0x4EA0 # <CJK> +0x98B4 0x4EA2 # <CJK> +0x98B5 0x4EB0 # <CJK> +0x98B6 0x4EB3 # <CJK> +0x98B7 0x4EB6 # <CJK> +0x98B8 0x4ECE # <CJK> +0x98B9 0x4ECD # <CJK> +0x98BA 0x4EC4 # <CJK> +0x98BB 0x4EC6 # <CJK> +0x98BC 0x4EC2 # <CJK> +0x98BD 0x4ED7 # <CJK> +0x98BE 0x4EDE # <CJK> +0x98BF 0x4EED # <CJK> +0x98C0 0x4EDF # <CJK> +0x98C1 0x4EF7 # <CJK> +0x98C2 0x4F09 # <CJK> +0x98C3 0x4F5A # <CJK> +0x98C4 0x4F30 # <CJK> +0x98C5 0x4F5B # <CJK> +0x98C6 0x4F5D # <CJK> +0x98C7 0x4F57 # <CJK> +0x98C8 0x4F47 # <CJK> +0x98C9 0x4F76 # <CJK> +0x98CA 0x4F88 # <CJK> +0x98CB 0x4F8F # <CJK> +0x98CC 0x4F98 # <CJK> +0x98CD 0x4F7B # <CJK> +0x98CE 0x4F69 # <CJK> +0x98CF 0x4F70 # <CJK> +0x98D0 0x4F91 # <CJK> +0x98D1 0x4F6F # <CJK> +0x98D2 0x4F86 # <CJK> +0x98D3 0x4F96 # <CJK> +0x98D4 0x5118 # <CJK> +0x98D5 0x4FD4 # <CJK> +0x98D6 0x4FDF # <CJK> +0x98D7 0x4FCE # <CJK> +0x98D8 0x4FD8 # <CJK> +0x98D9 0x4FDB # <CJK> +0x98DA 0x4FD1 # <CJK> +0x98DB 0x4FDA # <CJK> +0x98DC 0x4FD0 # <CJK> +0x98DD 0x4FE4 # <CJK> +0x98DE 0x4FE5 # <CJK> +0x98DF 0x501A # <CJK> +0x98E0 0x5028 # <CJK> +0x98E1 0x5014 # <CJK> +0x98E2 0x502A # <CJK> +0x98E3 0x5025 # <CJK> +0x98E4 0x5005 # <CJK> +0x98E5 0x4F1C # <CJK> +0x98E6 0x4FF6 # <CJK> +0x98E7 0x5021 # <CJK> +0x98E8 0x5029 # <CJK> +0x98E9 0x502C # <CJK> +0x98EA 0x4FFE # <CJK> +0x98EB 0x4FEF # <CJK> +0x98EC 0x5011 # <CJK> +0x98ED 0x5006 # <CJK> +0x98EE 0x5043 # <CJK> +0x98EF 0x5047 # <CJK> +0x98F0 0x6703 # <CJK> +0x98F1 0x5055 # <CJK> +0x98F2 0x5050 # <CJK> +0x98F3 0x5048 # <CJK> +0x98F4 0x505A # <CJK> +0x98F5 0x5056 # <CJK> +0x98F6 0x506C # <CJK> +0x98F7 0x5078 # <CJK> +0x98F8 0x5080 # <CJK> +0x98F9 0x509A # <CJK> +0x98FA 0x5085 # <CJK> +0x98FB 0x50B4 # <CJK> +0x98FC 0x50B2 # <CJK> +0x9940 0x50C9 # <CJK> +0x9941 0x50CA # <CJK> +0x9942 0x50B3 # <CJK> +0x9943 0x50C2 # <CJK> +0x9944 0x50D6 # <CJK> +0x9945 0x50DE # <CJK> +0x9946 0x50E5 # <CJK> +0x9947 0x50ED # <CJK> +0x9948 0x50E3 # <CJK> +0x9949 0x50EE # <CJK> +0x994A 0x50F9 # <CJK> +0x994B 0x50F5 # <CJK> +0x994C 0x5109 # <CJK> +0x994D 0x5101 # <CJK> +0x994E 0x5102 # <CJK> +0x994F 0x5116 # <CJK> +0x9950 0x5115 # <CJK> +0x9951 0x5114 # <CJK> +0x9952 0x511A # <CJK> +0x9953 0x5121 # <CJK> +0x9954 0x513A # <CJK> +0x9955 0x5137 # <CJK> +0x9956 0x513C # <CJK> +0x9957 0x513B # <CJK> +0x9958 0x513F # <CJK> +0x9959 0x5140 # <CJK> +0x995A 0x5152 # <CJK> +0x995B 0x514C # <CJK> +0x995C 0x5154 # <CJK> +0x995D 0x5162 # <CJK> +0x995E 0x7AF8 # <CJK> +0x995F 0x5169 # <CJK> +0x9960 0x516A # <CJK> +0x9961 0x516E # <CJK> +0x9962 0x5180 # <CJK> +0x9963 0x5182 # <CJK> +0x9964 0x56D8 # <CJK> +0x9965 0x518C # <CJK> +0x9966 0x5189 # <CJK> +0x9967 0x518F # <CJK> +0x9968 0x5191 # <CJK> +0x9969 0x5193 # <CJK> +0x996A 0x5195 # <CJK> +0x996B 0x5196 # <CJK> +0x996C 0x51A4 # <CJK> +0x996D 0x51A6 # <CJK> +0x996E 0x51A2 # <CJK> +0x996F 0x51A9 # <CJK> +0x9970 0x51AA # <CJK> +0x9971 0x51AB # <CJK> +0x9972 0x51B3 # <CJK> +0x9973 0x51B1 # <CJK> +0x9974 0x51B2 # <CJK> +0x9975 0x51B0 # <CJK> +0x9976 0x51B5 # <CJK> +0x9977 0x51BD # <CJK> +0x9978 0x51C5 # <CJK> +0x9979 0x51C9 # <CJK> +0x997A 0x51DB # <CJK> +0x997B 0x51E0 # <CJK> +0x997C 0x8655 # <CJK> +0x997D 0x51E9 # <CJK> +0x997E 0x51ED # <CJK> +0x9980 0x51F0 # <CJK> +0x9981 0x51F5 # <CJK> +0x9982 0x51FE # <CJK> +0x9983 0x5204 # <CJK> +0x9984 0x520B # <CJK> +0x9985 0x5214 # <CJK> +0x9986 0x520E # <CJK> +0x9987 0x5227 # <CJK> +0x9988 0x522A # <CJK> +0x9989 0x522E # <CJK> +0x998A 0x5233 # <CJK> +0x998B 0x5239 # <CJK> +0x998C 0x524F # <CJK> +0x998D 0x5244 # <CJK> +0x998E 0x524B # <CJK> +0x998F 0x524C # <CJK> +0x9990 0x525E # <CJK> +0x9991 0x5254 # <CJK> +0x9992 0x526A # <CJK> +0x9993 0x5274 # <CJK> +0x9994 0x5269 # <CJK> +0x9995 0x5273 # <CJK> +0x9996 0x527F # <CJK> +0x9997 0x527D # <CJK> +0x9998 0x528D # <CJK> +0x9999 0x5294 # <CJK> +0x999A 0x5292 # <CJK> +0x999B 0x5271 # <CJK> +0x999C 0x5288 # <CJK> +0x999D 0x5291 # <CJK> +0x999E 0x8FA8 # <CJK> +0x999F 0x8FA7 # <CJK> +0x99A0 0x52AC # <CJK> +0x99A1 0x52AD # <CJK> +0x99A2 0x52BC # <CJK> +0x99A3 0x52B5 # <CJK> +0x99A4 0x52C1 # <CJK> +0x99A5 0x52CD # <CJK> +0x99A6 0x52D7 # <CJK> +0x99A7 0x52DE # <CJK> +0x99A8 0x52E3 # <CJK> +0x99A9 0x52E6 # <CJK> +0x99AA 0x98ED # <CJK> +0x99AB 0x52E0 # <CJK> +0x99AC 0x52F3 # <CJK> +0x99AD 0x52F5 # <CJK> +0x99AE 0x52F8 # <CJK> +0x99AF 0x52F9 # <CJK> +0x99B0 0x5306 # <CJK> +0x99B1 0x5308 # <CJK> +0x99B2 0x7538 # <CJK> +0x99B3 0x530D # <CJK> +0x99B4 0x5310 # <CJK> +0x99B5 0x530F # <CJK> +0x99B6 0x5315 # <CJK> +0x99B7 0x531A # <CJK> +0x99B8 0x5323 # <CJK> +0x99B9 0x532F # <CJK> +0x99BA 0x5331 # <CJK> +0x99BB 0x5333 # <CJK> +0x99BC 0x5338 # <CJK> +0x99BD 0x5340 # <CJK> +0x99BE 0x5346 # <CJK> +0x99BF 0x5345 # <CJK> +0x99C0 0x4E17 # <CJK> +0x99C1 0x5349 # <CJK> +0x99C2 0x534D # <CJK> +0x99C3 0x51D6 # <CJK> +0x99C4 0x535E # <CJK> +0x99C5 0x5369 # <CJK> +0x99C6 0x536E # <CJK> +0x99C7 0x5918 # <CJK> +0x99C8 0x537B # <CJK> +0x99C9 0x5377 # <CJK> +0x99CA 0x5382 # <CJK> +0x99CB 0x5396 # <CJK> +0x99CC 0x53A0 # <CJK> +0x99CD 0x53A6 # <CJK> +0x99CE 0x53A5 # <CJK> +0x99CF 0x53AE # <CJK> +0x99D0 0x53B0 # <CJK> +0x99D1 0x53B6 # <CJK> +0x99D2 0x53C3 # <CJK> +0x99D3 0x7C12 # <CJK> +0x99D4 0x96D9 # <CJK> +0x99D5 0x53DF # <CJK> +0x99D6 0x66FC # <CJK> +0x99D7 0x71EE # <CJK> +0x99D8 0x53EE # <CJK> +0x99D9 0x53E8 # <CJK> +0x99DA 0x53ED # <CJK> +0x99DB 0x53FA # <CJK> +0x99DC 0x5401 # <CJK> +0x99DD 0x543D # <CJK> +0x99DE 0x5440 # <CJK> +0x99DF 0x542C # <CJK> +0x99E0 0x542D # <CJK> +0x99E1 0x543C # <CJK> +0x99E2 0x542E # <CJK> +0x99E3 0x5436 # <CJK> +0x99E4 0x5429 # <CJK> +0x99E5 0x541D # <CJK> +0x99E6 0x544E # <CJK> +0x99E7 0x548F # <CJK> +0x99E8 0x5475 # <CJK> +0x99E9 0x548E # <CJK> +0x99EA 0x545F # <CJK> +0x99EB 0x5471 # <CJK> +0x99EC 0x5477 # <CJK> +0x99ED 0x5470 # <CJK> +0x99EE 0x5492 # <CJK> +0x99EF 0x547B # <CJK> +0x99F0 0x5480 # <CJK> +0x99F1 0x5476 # <CJK> +0x99F2 0x5484 # <CJK> +0x99F3 0x5490 # <CJK> +0x99F4 0x5486 # <CJK> +0x99F5 0x54C7 # <CJK> +0x99F6 0x54A2 # <CJK> +0x99F7 0x54B8 # <CJK> +0x99F8 0x54A5 # <CJK> +0x99F9 0x54AC # <CJK> +0x99FA 0x54C4 # <CJK> +0x99FB 0x54C8 # <CJK> +0x99FC 0x54A8 # <CJK> +0x9A40 0x54AB # <CJK> +0x9A41 0x54C2 # <CJK> +0x9A42 0x54A4 # <CJK> +0x9A43 0x54BE # <CJK> +0x9A44 0x54BC # <CJK> +0x9A45 0x54D8 # <CJK> +0x9A46 0x54E5 # <CJK> +0x9A47 0x54E6 # <CJK> +0x9A48 0x550F # <CJK> +0x9A49 0x5514 # <CJK> +0x9A4A 0x54FD # <CJK> +0x9A4B 0x54EE # <CJK> +0x9A4C 0x54ED # <CJK> +0x9A4D 0x54FA # <CJK> +0x9A4E 0x54E2 # <CJK> +0x9A4F 0x5539 # <CJK> +0x9A50 0x5540 # <CJK> +0x9A51 0x5563 # <CJK> +0x9A52 0x554C # <CJK> +0x9A53 0x552E # <CJK> +0x9A54 0x555C # <CJK> +0x9A55 0x5545 # <CJK> +0x9A56 0x5556 # <CJK> +0x9A57 0x5557 # <CJK> +0x9A58 0x5538 # <CJK> +0x9A59 0x5533 # <CJK> +0x9A5A 0x555D # <CJK> +0x9A5B 0x5599 # <CJK> +0x9A5C 0x5580 # <CJK> +0x9A5D 0x54AF # <CJK> +0x9A5E 0x558A # <CJK> +0x9A5F 0x559F # <CJK> +0x9A60 0x557B # <CJK> +0x9A61 0x557E # <CJK> +0x9A62 0x5598 # <CJK> +0x9A63 0x559E # <CJK> +0x9A64 0x55AE # <CJK> +0x9A65 0x557C # <CJK> +0x9A66 0x5583 # <CJK> +0x9A67 0x55A9 # <CJK> +0x9A68 0x5587 # <CJK> +0x9A69 0x55A8 # <CJK> +0x9A6A 0x55DA # <CJK> +0x9A6B 0x55C5 # <CJK> +0x9A6C 0x55DF # <CJK> +0x9A6D 0x55C4 # <CJK> +0x9A6E 0x55DC # <CJK> +0x9A6F 0x55E4 # <CJK> +0x9A70 0x55D4 # <CJK> +0x9A71 0x5614 # <CJK> +0x9A72 0x55F7 # <CJK> +0x9A73 0x5616 # <CJK> +0x9A74 0x55FE # <CJK> +0x9A75 0x55FD # <CJK> +0x9A76 0x561B # <CJK> +0x9A77 0x55F9 # <CJK> +0x9A78 0x564E # <CJK> +0x9A79 0x5650 # <CJK> +0x9A7A 0x71DF # <CJK> +0x9A7B 0x5634 # <CJK> +0x9A7C 0x5636 # <CJK> +0x9A7D 0x5632 # <CJK> +0x9A7E 0x5638 # <CJK> +0x9A80 0x566B # <CJK> +0x9A81 0x5664 # <CJK> +0x9A82 0x562F # <CJK> +0x9A83 0x566C # <CJK> +0x9A84 0x566A # <CJK> +0x9A85 0x5686 # <CJK> +0x9A86 0x5680 # <CJK> +0x9A87 0x568A # <CJK> +0x9A88 0x56A0 # <CJK> +0x9A89 0x5694 # <CJK> +0x9A8A 0x568F # <CJK> +0x9A8B 0x56A5 # <CJK> +0x9A8C 0x56AE # <CJK> +0x9A8D 0x56B6 # <CJK> +0x9A8E 0x56B4 # <CJK> +0x9A8F 0x56C2 # <CJK> +0x9A90 0x56BC # <CJK> +0x9A91 0x56C1 # <CJK> +0x9A92 0x56C3 # <CJK> +0x9A93 0x56C0 # <CJK> +0x9A94 0x56C8 # <CJK> +0x9A95 0x56CE # <CJK> +0x9A96 0x56D1 # <CJK> +0x9A97 0x56D3 # <CJK> +0x9A98 0x56D7 # <CJK> +0x9A99 0x56EE # <CJK> +0x9A9A 0x56F9 # <CJK> +0x9A9B 0x5700 # <CJK> +0x9A9C 0x56FF # <CJK> +0x9A9D 0x5704 # <CJK> +0x9A9E 0x5709 # <CJK> +0x9A9F 0x5708 # <CJK> +0x9AA0 0x570B # <CJK> +0x9AA1 0x570D # <CJK> +0x9AA2 0x5713 # <CJK> +0x9AA3 0x5718 # <CJK> +0x9AA4 0x5716 # <CJK> +0x9AA5 0x55C7 # <CJK> +0x9AA6 0x571C # <CJK> +0x9AA7 0x5726 # <CJK> +0x9AA8 0x5737 # <CJK> +0x9AA9 0x5738 # <CJK> +0x9AAA 0x574E # <CJK> +0x9AAB 0x573B # <CJK> +0x9AAC 0x5740 # <CJK> +0x9AAD 0x574F # <CJK> +0x9AAE 0x5769 # <CJK> +0x9AAF 0x57C0 # <CJK> +0x9AB0 0x5788 # <CJK> +0x9AB1 0x5761 # <CJK> +0x9AB2 0x577F # <CJK> +0x9AB3 0x5789 # <CJK> +0x9AB4 0x5793 # <CJK> +0x9AB5 0x57A0 # <CJK> +0x9AB6 0x57B3 # <CJK> +0x9AB7 0x57A4 # <CJK> +0x9AB8 0x57AA # <CJK> +0x9AB9 0x57B0 # <CJK> +0x9ABA 0x57C3 # <CJK> +0x9ABB 0x57C6 # <CJK> +0x9ABC 0x57D4 # <CJK> +0x9ABD 0x57D2 # <CJK> +0x9ABE 0x57D3 # <CJK> +0x9ABF 0x580A # <CJK> +0x9AC0 0x57D6 # <CJK> +0x9AC1 0x57E3 # <CJK> +0x9AC2 0x580B # <CJK> +0x9AC3 0x5819 # <CJK> +0x9AC4 0x581D # <CJK> +0x9AC5 0x5872 # <CJK> +0x9AC6 0x5821 # <CJK> +0x9AC7 0x5862 # <CJK> +0x9AC8 0x584B # <CJK> +0x9AC9 0x5870 # <CJK> +0x9ACA 0x6BC0 # <CJK> +0x9ACB 0x5852 # <CJK> +0x9ACC 0x583D # <CJK> +0x9ACD 0x5879 # <CJK> +0x9ACE 0x5885 # <CJK> +0x9ACF 0x58B9 # <CJK> +0x9AD0 0x589F # <CJK> +0x9AD1 0x58AB # <CJK> +0x9AD2 0x58BA # <CJK> +0x9AD3 0x58DE # <CJK> +0x9AD4 0x58BB # <CJK> +0x9AD5 0x58B8 # <CJK> +0x9AD6 0x58AE # <CJK> +0x9AD7 0x58C5 # <CJK> +0x9AD8 0x58D3 # <CJK> +0x9AD9 0x58D1 # <CJK> +0x9ADA 0x58D7 # <CJK> +0x9ADB 0x58D9 # <CJK> +0x9ADC 0x58D8 # <CJK> +0x9ADD 0x58E5 # <CJK> +0x9ADE 0x58DC # <CJK> +0x9ADF 0x58E4 # <CJK> +0x9AE0 0x58DF # <CJK> +0x9AE1 0x58EF # <CJK> +0x9AE2 0x58FA # <CJK> +0x9AE3 0x58F9 # <CJK> +0x9AE4 0x58FB # <CJK> +0x9AE5 0x58FC # <CJK> +0x9AE6 0x58FD # <CJK> +0x9AE7 0x5902 # <CJK> +0x9AE8 0x590A # <CJK> +0x9AE9 0x5910 # <CJK> +0x9AEA 0x591B # <CJK> +0x9AEB 0x68A6 # <CJK> +0x9AEC 0x5925 # <CJK> +0x9AED 0x592C # <CJK> +0x9AEE 0x592D # <CJK> +0x9AEF 0x5932 # <CJK> +0x9AF0 0x5938 # <CJK> +0x9AF1 0x593E # <CJK> +0x9AF2 0x7AD2 # <CJK> +0x9AF3 0x5955 # <CJK> +0x9AF4 0x5950 # <CJK> +0x9AF5 0x594E # <CJK> +0x9AF6 0x595A # <CJK> +0x9AF7 0x5958 # <CJK> +0x9AF8 0x5962 # <CJK> +0x9AF9 0x5960 # <CJK> +0x9AFA 0x5967 # <CJK> +0x9AFB 0x596C # <CJK> +0x9AFC 0x5969 # <CJK> +0x9B40 0x5978 # <CJK> +0x9B41 0x5981 # <CJK> +0x9B42 0x599D # <CJK> +0x9B43 0x4F5E # <CJK> +0x9B44 0x4FAB # <CJK> +0x9B45 0x59A3 # <CJK> +0x9B46 0x59B2 # <CJK> +0x9B47 0x59C6 # <CJK> +0x9B48 0x59E8 # <CJK> +0x9B49 0x59DC # <CJK> +0x9B4A 0x598D # <CJK> +0x9B4B 0x59D9 # <CJK> +0x9B4C 0x59DA # <CJK> +0x9B4D 0x5A25 # <CJK> +0x9B4E 0x5A1F # <CJK> +0x9B4F 0x5A11 # <CJK> +0x9B50 0x5A1C # <CJK> +0x9B51 0x5A09 # <CJK> +0x9B52 0x5A1A # <CJK> +0x9B53 0x5A40 # <CJK> +0x9B54 0x5A6C # <CJK> +0x9B55 0x5A49 # <CJK> +0x9B56 0x5A35 # <CJK> +0x9B57 0x5A36 # <CJK> +0x9B58 0x5A62 # <CJK> +0x9B59 0x5A6A # <CJK> +0x9B5A 0x5A9A # <CJK> +0x9B5B 0x5ABC # <CJK> +0x9B5C 0x5ABE # <CJK> +0x9B5D 0x5ACB # <CJK> +0x9B5E 0x5AC2 # <CJK> +0x9B5F 0x5ABD # <CJK> +0x9B60 0x5AE3 # <CJK> +0x9B61 0x5AD7 # <CJK> +0x9B62 0x5AE6 # <CJK> +0x9B63 0x5AE9 # <CJK> +0x9B64 0x5AD6 # <CJK> +0x9B65 0x5AFA # <CJK> +0x9B66 0x5AFB # <CJK> +0x9B67 0x5B0C # <CJK> +0x9B68 0x5B0B # <CJK> +0x9B69 0x5B16 # <CJK> +0x9B6A 0x5B32 # <CJK> +0x9B6B 0x5AD0 # <CJK> +0x9B6C 0x5B2A # <CJK> +0x9B6D 0x5B36 # <CJK> +0x9B6E 0x5B3E # <CJK> +0x9B6F 0x5B43 # <CJK> +0x9B70 0x5B45 # <CJK> +0x9B71 0x5B40 # <CJK> +0x9B72 0x5B51 # <CJK> +0x9B73 0x5B55 # <CJK> +0x9B74 0x5B5A # <CJK> +0x9B75 0x5B5B # <CJK> +0x9B76 0x5B65 # <CJK> +0x9B77 0x5B69 # <CJK> +0x9B78 0x5B70 # <CJK> +0x9B79 0x5B73 # <CJK> +0x9B7A 0x5B75 # <CJK> +0x9B7B 0x5B78 # <CJK> +0x9B7C 0x6588 # <CJK> +0x9B7D 0x5B7A # <CJK> +0x9B7E 0x5B80 # <CJK> +0x9B80 0x5B83 # <CJK> +0x9B81 0x5BA6 # <CJK> +0x9B82 0x5BB8 # <CJK> +0x9B83 0x5BC3 # <CJK> +0x9B84 0x5BC7 # <CJK> +0x9B85 0x5BC9 # <CJK> +0x9B86 0x5BD4 # <CJK> +0x9B87 0x5BD0 # <CJK> +0x9B88 0x5BE4 # <CJK> +0x9B89 0x5BE6 # <CJK> +0x9B8A 0x5BE2 # <CJK> +0x9B8B 0x5BDE # <CJK> +0x9B8C 0x5BE5 # <CJK> +0x9B8D 0x5BEB # <CJK> +0x9B8E 0x5BF0 # <CJK> +0x9B8F 0x5BF6 # <CJK> +0x9B90 0x5BF3 # <CJK> +0x9B91 0x5C05 # <CJK> +0x9B92 0x5C07 # <CJK> +0x9B93 0x5C08 # <CJK> +0x9B94 0x5C0D # <CJK> +0x9B95 0x5C13 # <CJK> +0x9B96 0x5C20 # <CJK> +0x9B97 0x5C22 # <CJK> +0x9B98 0x5C28 # <CJK> +0x9B99 0x5C38 # <CJK> +0x9B9A 0x5C39 # <CJK> +0x9B9B 0x5C41 # <CJK> +0x9B9C 0x5C46 # <CJK> +0x9B9D 0x5C4E # <CJK> +0x9B9E 0x5C53 # <CJK> +0x9B9F 0x5C50 # <CJK> +0x9BA0 0x5C4F # <CJK> +0x9BA1 0x5B71 # <CJK> +0x9BA2 0x5C6C # <CJK> +0x9BA3 0x5C6E # <CJK> +0x9BA4 0x4E62 # <CJK> +0x9BA5 0x5C76 # <CJK> +0x9BA6 0x5C79 # <CJK> +0x9BA7 0x5C8C # <CJK> +0x9BA8 0x5C91 # <CJK> +0x9BA9 0x5C94 # <CJK> +0x9BAA 0x599B # <CJK> +0x9BAB 0x5CAB # <CJK> +0x9BAC 0x5CBB # <CJK> +0x9BAD 0x5CB6 # <CJK> +0x9BAE 0x5CBC # <CJK> +0x9BAF 0x5CB7 # <CJK> +0x9BB0 0x5CC5 # <CJK> +0x9BB1 0x5CBE # <CJK> +0x9BB2 0x5CC7 # <CJK> +0x9BB3 0x5CD9 # <CJK> +0x9BB4 0x5CE9 # <CJK> +0x9BB5 0x5CFD # <CJK> +0x9BB6 0x5CFA # <CJK> +0x9BB7 0x5CED # <CJK> +0x9BB8 0x5D8C # <CJK> +0x9BB9 0x5CEA # <CJK> +0x9BBA 0x5D0B # <CJK> +0x9BBB 0x5D15 # <CJK> +0x9BBC 0x5D17 # <CJK> +0x9BBD 0x5D5C # <CJK> +0x9BBE 0x5D1F # <CJK> +0x9BBF 0x5D1B # <CJK> +0x9BC0 0x5D11 # <CJK> +0x9BC1 0x5D14 # <CJK> +0x9BC2 0x5D22 # <CJK> +0x9BC3 0x5D1A # <CJK> +0x9BC4 0x5D19 # <CJK> +0x9BC5 0x5D18 # <CJK> +0x9BC6 0x5D4C # <CJK> +0x9BC7 0x5D52 # <CJK> +0x9BC8 0x5D4E # <CJK> +0x9BC9 0x5D4B # <CJK> +0x9BCA 0x5D6C # <CJK> +0x9BCB 0x5D73 # <CJK> +0x9BCC 0x5D76 # <CJK> +0x9BCD 0x5D87 # <CJK> +0x9BCE 0x5D84 # <CJK> +0x9BCF 0x5D82 # <CJK> +0x9BD0 0x5DA2 # <CJK> +0x9BD1 0x5D9D # <CJK> +0x9BD2 0x5DAC # <CJK> +0x9BD3 0x5DAE # <CJK> +0x9BD4 0x5DBD # <CJK> +0x9BD5 0x5D90 # <CJK> +0x9BD6 0x5DB7 # <CJK> +0x9BD7 0x5DBC # <CJK> +0x9BD8 0x5DC9 # <CJK> +0x9BD9 0x5DCD # <CJK> +0x9BDA 0x5DD3 # <CJK> +0x9BDB 0x5DD2 # <CJK> +0x9BDC 0x5DD6 # <CJK> +0x9BDD 0x5DDB # <CJK> +0x9BDE 0x5DEB # <CJK> +0x9BDF 0x5DF2 # <CJK> +0x9BE0 0x5DF5 # <CJK> +0x9BE1 0x5E0B # <CJK> +0x9BE2 0x5E1A # <CJK> +0x9BE3 0x5E19 # <CJK> +0x9BE4 0x5E11 # <CJK> +0x9BE5 0x5E1B # <CJK> +0x9BE6 0x5E36 # <CJK> +0x9BE7 0x5E37 # <CJK> +0x9BE8 0x5E44 # <CJK> +0x9BE9 0x5E43 # <CJK> +0x9BEA 0x5E40 # <CJK> +0x9BEB 0x5E4E # <CJK> +0x9BEC 0x5E57 # <CJK> +0x9BED 0x5E54 # <CJK> +0x9BEE 0x5E5F # <CJK> +0x9BEF 0x5E62 # <CJK> +0x9BF0 0x5E64 # <CJK> +0x9BF1 0x5E47 # <CJK> +0x9BF2 0x5E75 # <CJK> +0x9BF3 0x5E76 # <CJK> +0x9BF4 0x5E7A # <CJK> +0x9BF5 0x9EBC # <CJK> +0x9BF6 0x5E7F # <CJK> +0x9BF7 0x5EA0 # <CJK> +0x9BF8 0x5EC1 # <CJK> +0x9BF9 0x5EC2 # <CJK> +0x9BFA 0x5EC8 # <CJK> +0x9BFB 0x5ED0 # <CJK> +0x9BFC 0x5ECF # <CJK> +0x9C40 0x5ED6 # <CJK> +0x9C41 0x5EE3 # <CJK> +0x9C42 0x5EDD # <CJK> +0x9C43 0x5EDA # <CJK> +0x9C44 0x5EDB # <CJK> +0x9C45 0x5EE2 # <CJK> +0x9C46 0x5EE1 # <CJK> +0x9C47 0x5EE8 # <CJK> +0x9C48 0x5EE9 # <CJK> +0x9C49 0x5EEC # <CJK> +0x9C4A 0x5EF1 # <CJK> +0x9C4B 0x5EF3 # <CJK> +0x9C4C 0x5EF0 # <CJK> +0x9C4D 0x5EF4 # <CJK> +0x9C4E 0x5EF8 # <CJK> +0x9C4F 0x5EFE # <CJK> +0x9C50 0x5F03 # <CJK> +0x9C51 0x5F09 # <CJK> +0x9C52 0x5F5D # <CJK> +0x9C53 0x5F5C # <CJK> +0x9C54 0x5F0B # <CJK> +0x9C55 0x5F11 # <CJK> +0x9C56 0x5F16 # <CJK> +0x9C57 0x5F29 # <CJK> +0x9C58 0x5F2D # <CJK> +0x9C59 0x5F38 # <CJK> +0x9C5A 0x5F41 # <CJK> +0x9C5B 0x5F48 # <CJK> +0x9C5C 0x5F4C # <CJK> +0x9C5D 0x5F4E # <CJK> +0x9C5E 0x5F2F # <CJK> +0x9C5F 0x5F51 # <CJK> +0x9C60 0x5F56 # <CJK> +0x9C61 0x5F57 # <CJK> +0x9C62 0x5F59 # <CJK> +0x9C63 0x5F61 # <CJK> +0x9C64 0x5F6D # <CJK> +0x9C65 0x5F73 # <CJK> +0x9C66 0x5F77 # <CJK> +0x9C67 0x5F83 # <CJK> +0x9C68 0x5F82 # <CJK> +0x9C69 0x5F7F # <CJK> +0x9C6A 0x5F8A # <CJK> +0x9C6B 0x5F88 # <CJK> +0x9C6C 0x5F91 # <CJK> +0x9C6D 0x5F87 # <CJK> +0x9C6E 0x5F9E # <CJK> +0x9C6F 0x5F99 # <CJK> +0x9C70 0x5F98 # <CJK> +0x9C71 0x5FA0 # <CJK> +0x9C72 0x5FA8 # <CJK> +0x9C73 0x5FAD # <CJK> +0x9C74 0x5FBC # <CJK> +0x9C75 0x5FD6 # <CJK> +0x9C76 0x5FFB # <CJK> +0x9C77 0x5FE4 # <CJK> +0x9C78 0x5FF8 # <CJK> +0x9C79 0x5FF1 # <CJK> +0x9C7A 0x5FDD # <CJK> +0x9C7B 0x60B3 # <CJK> +0x9C7C 0x5FFF # <CJK> +0x9C7D 0x6021 # <CJK> +0x9C7E 0x6060 # <CJK> +0x9C80 0x6019 # <CJK> +0x9C81 0x6010 # <CJK> +0x9C82 0x6029 # <CJK> +0x9C83 0x600E # <CJK> +0x9C84 0x6031 # <CJK> +0x9C85 0x601B # <CJK> +0x9C86 0x6015 # <CJK> +0x9C87 0x602B # <CJK> +0x9C88 0x6026 # <CJK> +0x9C89 0x600F # <CJK> +0x9C8A 0x603A # <CJK> +0x9C8B 0x605A # <CJK> +0x9C8C 0x6041 # <CJK> +0x9C8D 0x606A # <CJK> +0x9C8E 0x6077 # <CJK> +0x9C8F 0x605F # <CJK> +0x9C90 0x604A # <CJK> +0x9C91 0x6046 # <CJK> +0x9C92 0x604D # <CJK> +0x9C93 0x6063 # <CJK> +0x9C94 0x6043 # <CJK> +0x9C95 0x6064 # <CJK> +0x9C96 0x6042 # <CJK> +0x9C97 0x606C # <CJK> +0x9C98 0x606B # <CJK> +0x9C99 0x6059 # <CJK> +0x9C9A 0x6081 # <CJK> +0x9C9B 0x608D # <CJK> +0x9C9C 0x60E7 # <CJK> +0x9C9D 0x6083 # <CJK> +0x9C9E 0x609A # <CJK> +0x9C9F 0x6084 # <CJK> +0x9CA0 0x609B # <CJK> +0x9CA1 0x6096 # <CJK> +0x9CA2 0x6097 # <CJK> +0x9CA3 0x6092 # <CJK> +0x9CA4 0x60A7 # <CJK> +0x9CA5 0x608B # <CJK> +0x9CA6 0x60E1 # <CJK> +0x9CA7 0x60B8 # <CJK> +0x9CA8 0x60E0 # <CJK> +0x9CA9 0x60D3 # <CJK> +0x9CAA 0x60B4 # <CJK> +0x9CAB 0x5FF0 # <CJK> +0x9CAC 0x60BD # <CJK> +0x9CAD 0x60C6 # <CJK> +0x9CAE 0x60B5 # <CJK> +0x9CAF 0x60D8 # <CJK> +0x9CB0 0x614D # <CJK> +0x9CB1 0x6115 # <CJK> +0x9CB2 0x6106 # <CJK> +0x9CB3 0x60F6 # <CJK> +0x9CB4 0x60F7 # <CJK> +0x9CB5 0x6100 # <CJK> +0x9CB6 0x60F4 # <CJK> +0x9CB7 0x60FA # <CJK> +0x9CB8 0x6103 # <CJK> +0x9CB9 0x6121 # <CJK> +0x9CBA 0x60FB # <CJK> +0x9CBB 0x60F1 # <CJK> +0x9CBC 0x610D # <CJK> +0x9CBD 0x610E # <CJK> +0x9CBE 0x6147 # <CJK> +0x9CBF 0x613E # <CJK> +0x9CC0 0x6128 # <CJK> +0x9CC1 0x6127 # <CJK> +0x9CC2 0x614A # <CJK> +0x9CC3 0x613F # <CJK> +0x9CC4 0x613C # <CJK> +0x9CC5 0x612C # <CJK> +0x9CC6 0x6134 # <CJK> +0x9CC7 0x613D # <CJK> +0x9CC8 0x6142 # <CJK> +0x9CC9 0x6144 # <CJK> +0x9CCA 0x6173 # <CJK> +0x9CCB 0x6177 # <CJK> +0x9CCC 0x6158 # <CJK> +0x9CCD 0x6159 # <CJK> +0x9CCE 0x615A # <CJK> +0x9CCF 0x616B # <CJK> +0x9CD0 0x6174 # <CJK> +0x9CD1 0x616F # <CJK> +0x9CD2 0x6165 # <CJK> +0x9CD3 0x6171 # <CJK> +0x9CD4 0x615F # <CJK> +0x9CD5 0x615D # <CJK> +0x9CD6 0x6153 # <CJK> +0x9CD7 0x6175 # <CJK> +0x9CD8 0x6199 # <CJK> +0x9CD9 0x6196 # <CJK> +0x9CDA 0x6187 # <CJK> +0x9CDB 0x61AC # <CJK> +0x9CDC 0x6194 # <CJK> +0x9CDD 0x619A # <CJK> +0x9CDE 0x618A # <CJK> +0x9CDF 0x6191 # <CJK> +0x9CE0 0x61AB # <CJK> +0x9CE1 0x61AE # <CJK> +0x9CE2 0x61CC # <CJK> +0x9CE3 0x61CA # <CJK> +0x9CE4 0x61C9 # <CJK> +0x9CE5 0x61F7 # <CJK> +0x9CE6 0x61C8 # <CJK> +0x9CE7 0x61C3 # <CJK> +0x9CE8 0x61C6 # <CJK> +0x9CE9 0x61BA # <CJK> +0x9CEA 0x61CB # <CJK> +0x9CEB 0x7F79 # <CJK> +0x9CEC 0x61CD # <CJK> +0x9CED 0x61E6 # <CJK> +0x9CEE 0x61E3 # <CJK> +0x9CEF 0x61F6 # <CJK> +0x9CF0 0x61FA # <CJK> +0x9CF1 0x61F4 # <CJK> +0x9CF2 0x61FF # <CJK> +0x9CF3 0x61FD # <CJK> +0x9CF4 0x61FC # <CJK> +0x9CF5 0x61FE # <CJK> +0x9CF6 0x6200 # <CJK> +0x9CF7 0x6208 # <CJK> +0x9CF8 0x6209 # <CJK> +0x9CF9 0x620D # <CJK> +0x9CFA 0x620C # <CJK> +0x9CFB 0x6214 # <CJK> +0x9CFC 0x621B # <CJK> +0x9D40 0x621E # <CJK> +0x9D41 0x6221 # <CJK> +0x9D42 0x622A # <CJK> +0x9D43 0x622E # <CJK> +0x9D44 0x6230 # <CJK> +0x9D45 0x6232 # <CJK> +0x9D46 0x6233 # <CJK> +0x9D47 0x6241 # <CJK> +0x9D48 0x624E # <CJK> +0x9D49 0x625E # <CJK> +0x9D4A 0x6263 # <CJK> +0x9D4B 0x625B # <CJK> +0x9D4C 0x6260 # <CJK> +0x9D4D 0x6268 # <CJK> +0x9D4E 0x627C # <CJK> +0x9D4F 0x6282 # <CJK> +0x9D50 0x6289 # <CJK> +0x9D51 0x627E # <CJK> +0x9D52 0x6292 # <CJK> +0x9D53 0x6293 # <CJK> +0x9D54 0x6296 # <CJK> +0x9D55 0x62D4 # <CJK> +0x9D56 0x6283 # <CJK> +0x9D57 0x6294 # <CJK> +0x9D58 0x62D7 # <CJK> +0x9D59 0x62D1 # <CJK> +0x9D5A 0x62BB # <CJK> +0x9D5B 0x62CF # <CJK> +0x9D5C 0x62FF # <CJK> +0x9D5D 0x62C6 # <CJK> +0x9D5E 0x64D4 # <CJK> +0x9D5F 0x62C8 # <CJK> +0x9D60 0x62DC # <CJK> +0x9D61 0x62CC # <CJK> +0x9D62 0x62CA # <CJK> +0x9D63 0x62C2 # <CJK> +0x9D64 0x62C7 # <CJK> +0x9D65 0x629B # <CJK> +0x9D66 0x62C9 # <CJK> +0x9D67 0x630C # <CJK> +0x9D68 0x62EE # <CJK> +0x9D69 0x62F1 # <CJK> +0x9D6A 0x6327 # <CJK> +0x9D6B 0x6302 # <CJK> +0x9D6C 0x6308 # <CJK> +0x9D6D 0x62EF # <CJK> +0x9D6E 0x62F5 # <CJK> +0x9D6F 0x6350 # <CJK> +0x9D70 0x633E # <CJK> +0x9D71 0x634D # <CJK> +0x9D72 0x641C # <CJK> +0x9D73 0x634F # <CJK> +0x9D74 0x6396 # <CJK> +0x9D75 0x638E # <CJK> +0x9D76 0x6380 # <CJK> +0x9D77 0x63AB # <CJK> +0x9D78 0x6376 # <CJK> +0x9D79 0x63A3 # <CJK> +0x9D7A 0x638F # <CJK> +0x9D7B 0x6389 # <CJK> +0x9D7C 0x639F # <CJK> +0x9D7D 0x63B5 # <CJK> +0x9D7E 0x636B # <CJK> +0x9D80 0x6369 # <CJK> +0x9D81 0x63BE # <CJK> +0x9D82 0x63E9 # <CJK> +0x9D83 0x63C0 # <CJK> +0x9D84 0x63C6 # <CJK> +0x9D85 0x63E3 # <CJK> +0x9D86 0x63C9 # <CJK> +0x9D87 0x63D2 # <CJK> +0x9D88 0x63F6 # <CJK> +0x9D89 0x63C4 # <CJK> +0x9D8A 0x6416 # <CJK> +0x9D8B 0x6434 # <CJK> +0x9D8C 0x6406 # <CJK> +0x9D8D 0x6413 # <CJK> +0x9D8E 0x6426 # <CJK> +0x9D8F 0x6436 # <CJK> +0x9D90 0x651D # <CJK> +0x9D91 0x6417 # <CJK> +0x9D92 0x6428 # <CJK> +0x9D93 0x640F # <CJK> +0x9D94 0x6467 # <CJK> +0x9D95 0x646F # <CJK> +0x9D96 0x6476 # <CJK> +0x9D97 0x644E # <CJK> +0x9D98 0x652A # <CJK> +0x9D99 0x6495 # <CJK> +0x9D9A 0x6493 # <CJK> +0x9D9B 0x64A5 # <CJK> +0x9D9C 0x64A9 # <CJK> +0x9D9D 0x6488 # <CJK> +0x9D9E 0x64BC # <CJK> +0x9D9F 0x64DA # <CJK> +0x9DA0 0x64D2 # <CJK> +0x9DA1 0x64C5 # <CJK> +0x9DA2 0x64C7 # <CJK> +0x9DA3 0x64BB # <CJK> +0x9DA4 0x64D8 # <CJK> +0x9DA5 0x64C2 # <CJK> +0x9DA6 0x64F1 # <CJK> +0x9DA7 0x64E7 # <CJK> +0x9DA8 0x8209 # <CJK> +0x9DA9 0x64E0 # <CJK> +0x9DAA 0x64E1 # <CJK> +0x9DAB 0x62AC # <CJK> +0x9DAC 0x64E3 # <CJK> +0x9DAD 0x64EF # <CJK> +0x9DAE 0x652C # <CJK> +0x9DAF 0x64F6 # <CJK> +0x9DB0 0x64F4 # <CJK> +0x9DB1 0x64F2 # <CJK> +0x9DB2 0x64FA # <CJK> +0x9DB3 0x6500 # <CJK> +0x9DB4 0x64FD # <CJK> +0x9DB5 0x6518 # <CJK> +0x9DB6 0x651C # <CJK> +0x9DB7 0x6505 # <CJK> +0x9DB8 0x6524 # <CJK> +0x9DB9 0x6523 # <CJK> +0x9DBA 0x652B # <CJK> +0x9DBB 0x6534 # <CJK> +0x9DBC 0x6535 # <CJK> +0x9DBD 0x6537 # <CJK> +0x9DBE 0x6536 # <CJK> +0x9DBF 0x6538 # <CJK> +0x9DC0 0x754B # <CJK> +0x9DC1 0x6548 # <CJK> +0x9DC2 0x6556 # <CJK> +0x9DC3 0x6555 # <CJK> +0x9DC4 0x654D # <CJK> +0x9DC5 0x6558 # <CJK> +0x9DC6 0x655E # <CJK> +0x9DC7 0x655D # <CJK> +0x9DC8 0x6572 # <CJK> +0x9DC9 0x6578 # <CJK> +0x9DCA 0x6582 # <CJK> +0x9DCB 0x6583 # <CJK> +0x9DCC 0x8B8A # <CJK> +0x9DCD 0x659B # <CJK> +0x9DCE 0x659F # <CJK> +0x9DCF 0x65AB # <CJK> +0x9DD0 0x65B7 # <CJK> +0x9DD1 0x65C3 # <CJK> +0x9DD2 0x65C6 # <CJK> +0x9DD3 0x65C1 # <CJK> +0x9DD4 0x65C4 # <CJK> +0x9DD5 0x65CC # <CJK> +0x9DD6 0x65D2 # <CJK> +0x9DD7 0x65DB # <CJK> +0x9DD8 0x65D9 # <CJK> +0x9DD9 0x65E0 # <CJK> +0x9DDA 0x65E1 # <CJK> +0x9DDB 0x65F1 # <CJK> +0x9DDC 0x6772 # <CJK> +0x9DDD 0x660A # <CJK> +0x9DDE 0x6603 # <CJK> +0x9DDF 0x65FB # <CJK> +0x9DE0 0x6773 # <CJK> +0x9DE1 0x6635 # <CJK> +0x9DE2 0x6636 # <CJK> +0x9DE3 0x6634 # <CJK> +0x9DE4 0x661C # <CJK> +0x9DE5 0x664F # <CJK> +0x9DE6 0x6644 # <CJK> +0x9DE7 0x6649 # <CJK> +0x9DE8 0x6641 # <CJK> +0x9DE9 0x665E # <CJK> +0x9DEA 0x665D # <CJK> +0x9DEB 0x6664 # <CJK> +0x9DEC 0x6667 # <CJK> +0x9DED 0x6668 # <CJK> +0x9DEE 0x665F # <CJK> +0x9DEF 0x6662 # <CJK> +0x9DF0 0x6670 # <CJK> +0x9DF1 0x6683 # <CJK> +0x9DF2 0x6688 # <CJK> +0x9DF3 0x668E # <CJK> +0x9DF4 0x6689 # <CJK> +0x9DF5 0x6684 # <CJK> +0x9DF6 0x6698 # <CJK> +0x9DF7 0x669D # <CJK> +0x9DF8 0x66C1 # <CJK> +0x9DF9 0x66B9 # <CJK> +0x9DFA 0x66C9 # <CJK> +0x9DFB 0x66BE # <CJK> +0x9DFC 0x66BC # <CJK> +0x9E40 0x66C4 # <CJK> +0x9E41 0x66B8 # <CJK> +0x9E42 0x66D6 # <CJK> +0x9E43 0x66DA # <CJK> +0x9E44 0x66E0 # <CJK> +0x9E45 0x663F # <CJK> +0x9E46 0x66E6 # <CJK> +0x9E47 0x66E9 # <CJK> +0x9E48 0x66F0 # <CJK> +0x9E49 0x66F5 # <CJK> +0x9E4A 0x66F7 # <CJK> +0x9E4B 0x670F # <CJK> +0x9E4C 0x6716 # <CJK> +0x9E4D 0x671E # <CJK> +0x9E4E 0x6726 # <CJK> +0x9E4F 0x6727 # <CJK> +0x9E50 0x9738 # <CJK> +0x9E51 0x672E # <CJK> +0x9E52 0x673F # <CJK> +0x9E53 0x6736 # <CJK> +0x9E54 0x6741 # <CJK> +0x9E55 0x6738 # <CJK> +0x9E56 0x6737 # <CJK> +0x9E57 0x6746 # <CJK> +0x9E58 0x675E # <CJK> +0x9E59 0x6760 # <CJK> +0x9E5A 0x6759 # <CJK> +0x9E5B 0x6763 # <CJK> +0x9E5C 0x6764 # <CJK> +0x9E5D 0x6789 # <CJK> +0x9E5E 0x6770 # <CJK> +0x9E5F 0x67A9 # <CJK> +0x9E60 0x677C # <CJK> +0x9E61 0x676A # <CJK> +0x9E62 0x678C # <CJK> +0x9E63 0x678B # <CJK> +0x9E64 0x67A6 # <CJK> +0x9E65 0x67A1 # <CJK> +0x9E66 0x6785 # <CJK> +0x9E67 0x67B7 # <CJK> +0x9E68 0x67EF # <CJK> +0x9E69 0x67B4 # <CJK> +0x9E6A 0x67EC # <CJK> +0x9E6B 0x67B3 # <CJK> +0x9E6C 0x67E9 # <CJK> +0x9E6D 0x67B8 # <CJK> +0x9E6E 0x67E4 # <CJK> +0x9E6F 0x67DE # <CJK> +0x9E70 0x67DD # <CJK> +0x9E71 0x67E2 # <CJK> +0x9E72 0x67EE # <CJK> +0x9E73 0x67B9 # <CJK> +0x9E74 0x67CE # <CJK> +0x9E75 0x67C6 # <CJK> +0x9E76 0x67E7 # <CJK> +0x9E77 0x6A9C # <CJK> +0x9E78 0x681E # <CJK> +0x9E79 0x6846 # <CJK> +0x9E7A 0x6829 # <CJK> +0x9E7B 0x6840 # <CJK> +0x9E7C 0x684D # <CJK> +0x9E7D 0x6832 # <CJK> +0x9E7E 0x684E # <CJK> +0x9E80 0x68B3 # <CJK> +0x9E81 0x682B # <CJK> +0x9E82 0x6859 # <CJK> +0x9E83 0x6863 # <CJK> +0x9E84 0x6877 # <CJK> +0x9E85 0x687F # <CJK> +0x9E86 0x689F # <CJK> +0x9E87 0x688F # <CJK> +0x9E88 0x68AD # <CJK> +0x9E89 0x6894 # <CJK> +0x9E8A 0x689D # <CJK> +0x9E8B 0x689B # <CJK> +0x9E8C 0x6883 # <CJK> +0x9E8D 0x6AAE # <CJK> +0x9E8E 0x68B9 # <CJK> +0x9E8F 0x6874 # <CJK> +0x9E90 0x68B5 # <CJK> +0x9E91 0x68A0 # <CJK> +0x9E92 0x68BA # <CJK> +0x9E93 0x690F # <CJK> +0x9E94 0x688D # <CJK> +0x9E95 0x687E # <CJK> +0x9E96 0x6901 # <CJK> +0x9E97 0x68CA # <CJK> +0x9E98 0x6908 # <CJK> +0x9E99 0x68D8 # <CJK> +0x9E9A 0x6922 # <CJK> +0x9E9B 0x6926 # <CJK> +0x9E9C 0x68E1 # <CJK> +0x9E9D 0x690C # <CJK> +0x9E9E 0x68CD # <CJK> +0x9E9F 0x68D4 # <CJK> +0x9EA0 0x68E7 # <CJK> +0x9EA1 0x68D5 # <CJK> +0x9EA2 0x6936 # <CJK> +0x9EA3 0x6912 # <CJK> +0x9EA4 0x6904 # <CJK> +0x9EA5 0x68D7 # <CJK> +0x9EA6 0x68E3 # <CJK> +0x9EA7 0x6925 # <CJK> +0x9EA8 0x68F9 # <CJK> +0x9EA9 0x68E0 # <CJK> +0x9EAA 0x68EF # <CJK> +0x9EAB 0x6928 # <CJK> +0x9EAC 0x692A # <CJK> +0x9EAD 0x691A # <CJK> +0x9EAE 0x6923 # <CJK> +0x9EAF 0x6921 # <CJK> +0x9EB0 0x68C6 # <CJK> +0x9EB1 0x6979 # <CJK> +0x9EB2 0x6977 # <CJK> +0x9EB3 0x695C # <CJK> +0x9EB4 0x6978 # <CJK> +0x9EB5 0x696B # <CJK> +0x9EB6 0x6954 # <CJK> +0x9EB7 0x697E # <CJK> +0x9EB8 0x696E # <CJK> +0x9EB9 0x6939 # <CJK> +0x9EBA 0x6974 # <CJK> +0x9EBB 0x693D # <CJK> +0x9EBC 0x6959 # <CJK> +0x9EBD 0x6930 # <CJK> +0x9EBE 0x6961 # <CJK> +0x9EBF 0x695E # <CJK> +0x9EC0 0x695D # <CJK> +0x9EC1 0x6981 # <CJK> +0x9EC2 0x696A # <CJK> +0x9EC3 0x69B2 # <CJK> +0x9EC4 0x69AE # <CJK> +0x9EC5 0x69D0 # <CJK> +0x9EC6 0x69BF # <CJK> +0x9EC7 0x69C1 # <CJK> +0x9EC8 0x69D3 # <CJK> +0x9EC9 0x69BE # <CJK> +0x9ECA 0x69CE # <CJK> +0x9ECB 0x5BE8 # <CJK> +0x9ECC 0x69CA # <CJK> +0x9ECD 0x69DD # <CJK> +0x9ECE 0x69BB # <CJK> +0x9ECF 0x69C3 # <CJK> +0x9ED0 0x69A7 # <CJK> +0x9ED1 0x6A2E # <CJK> +0x9ED2 0x6991 # <CJK> +0x9ED3 0x69A0 # <CJK> +0x9ED4 0x699C # <CJK> +0x9ED5 0x6995 # <CJK> +0x9ED6 0x69B4 # <CJK> +0x9ED7 0x69DE # <CJK> +0x9ED8 0x69E8 # <CJK> +0x9ED9 0x6A02 # <CJK> +0x9EDA 0x6A1B # <CJK> +0x9EDB 0x69FF # <CJK> +0x9EDC 0x6B0A # <CJK> +0x9EDD 0x69F9 # <CJK> +0x9EDE 0x69F2 # <CJK> +0x9EDF 0x69E7 # <CJK> +0x9EE0 0x6A05 # <CJK> +0x9EE1 0x69B1 # <CJK> +0x9EE2 0x6A1E # <CJK> +0x9EE3 0x69ED # <CJK> +0x9EE4 0x6A14 # <CJK> +0x9EE5 0x69EB # <CJK> +0x9EE6 0x6A0A # <CJK> +0x9EE7 0x6A12 # <CJK> +0x9EE8 0x6AC1 # <CJK> +0x9EE9 0x6A23 # <CJK> +0x9EEA 0x6A13 # <CJK> +0x9EEB 0x6A44 # <CJK> +0x9EEC 0x6A0C # <CJK> +0x9EED 0x6A72 # <CJK> +0x9EEE 0x6A36 # <CJK> +0x9EEF 0x6A78 # <CJK> +0x9EF0 0x6A47 # <CJK> +0x9EF1 0x6A62 # <CJK> +0x9EF2 0x6A59 # <CJK> +0x9EF3 0x6A66 # <CJK> +0x9EF4 0x6A48 # <CJK> +0x9EF5 0x6A38 # <CJK> +0x9EF6 0x6A22 # <CJK> +0x9EF7 0x6A90 # <CJK> +0x9EF8 0x6A8D # <CJK> +0x9EF9 0x6AA0 # <CJK> +0x9EFA 0x6A84 # <CJK> +0x9EFB 0x6AA2 # <CJK> +0x9EFC 0x6AA3 # <CJK> +0x9F40 0x6A97 # <CJK> +0x9F41 0x8617 # <CJK> +0x9F42 0x6ABB # <CJK> +0x9F43 0x6AC3 # <CJK> +0x9F44 0x6AC2 # <CJK> +0x9F45 0x6AB8 # <CJK> +0x9F46 0x6AB3 # <CJK> +0x9F47 0x6AAC # <CJK> +0x9F48 0x6ADE # <CJK> +0x9F49 0x6AD1 # <CJK> +0x9F4A 0x6ADF # <CJK> +0x9F4B 0x6AAA # <CJK> +0x9F4C 0x6ADA # <CJK> +0x9F4D 0x6AEA # <CJK> +0x9F4E 0x6AFB # <CJK> +0x9F4F 0x6B05 # <CJK> +0x9F50 0x8616 # <CJK> +0x9F51 0x6AFA # <CJK> +0x9F52 0x6B12 # <CJK> +0x9F53 0x6B16 # <CJK> +0x9F54 0x9B31 # <CJK> +0x9F55 0x6B1F # <CJK> +0x9F56 0x6B38 # <CJK> +0x9F57 0x6B37 # <CJK> +0x9F58 0x76DC # <CJK> +0x9F59 0x6B39 # <CJK> +0x9F5A 0x98EE # <CJK> +0x9F5B 0x6B47 # <CJK> +0x9F5C 0x6B43 # <CJK> +0x9F5D 0x6B49 # <CJK> +0x9F5E 0x6B50 # <CJK> +0x9F5F 0x6B59 # <CJK> +0x9F60 0x6B54 # <CJK> +0x9F61 0x6B5B # <CJK> +0x9F62 0x6B5F # <CJK> +0x9F63 0x6B61 # <CJK> +0x9F64 0x6B78 # <CJK> +0x9F65 0x6B79 # <CJK> +0x9F66 0x6B7F # <CJK> +0x9F67 0x6B80 # <CJK> +0x9F68 0x6B84 # <CJK> +0x9F69 0x6B83 # <CJK> +0x9F6A 0x6B8D # <CJK> +0x9F6B 0x6B98 # <CJK> +0x9F6C 0x6B95 # <CJK> +0x9F6D 0x6B9E # <CJK> +0x9F6E 0x6BA4 # <CJK> +0x9F6F 0x6BAA # <CJK> +0x9F70 0x6BAB # <CJK> +0x9F71 0x6BAF # <CJK> +0x9F72 0x6BB2 # <CJK> +0x9F73 0x6BB1 # <CJK> +0x9F74 0x6BB3 # <CJK> +0x9F75 0x6BB7 # <CJK> +0x9F76 0x6BBC # <CJK> +0x9F77 0x6BC6 # <CJK> +0x9F78 0x6BCB # <CJK> +0x9F79 0x6BD3 # <CJK> +0x9F7A 0x6BDF # <CJK> +0x9F7B 0x6BEC # <CJK> +0x9F7C 0x6BEB # <CJK> +0x9F7D 0x6BF3 # <CJK> +0x9F7E 0x6BEF # <CJK> +0x9F80 0x9EBE # <CJK> +0x9F81 0x6C08 # <CJK> +0x9F82 0x6C13 # <CJK> +0x9F83 0x6C14 # <CJK> +0x9F84 0x6C1B # <CJK> +0x9F85 0x6C24 # <CJK> +0x9F86 0x6C23 # <CJK> +0x9F87 0x6C5E # <CJK> +0x9F88 0x6C55 # <CJK> +0x9F89 0x6C62 # <CJK> +0x9F8A 0x6C6A # <CJK> +0x9F8B 0x6C82 # <CJK> +0x9F8C 0x6C8D # <CJK> +0x9F8D 0x6C9A # <CJK> +0x9F8E 0x6C81 # <CJK> +0x9F8F 0x6C9B # <CJK> +0x9F90 0x6C7E # <CJK> +0x9F91 0x6C68 # <CJK> +0x9F92 0x6C73 # <CJK> +0x9F93 0x6C92 # <CJK> +0x9F94 0x6C90 # <CJK> +0x9F95 0x6CC4 # <CJK> +0x9F96 0x6CF1 # <CJK> +0x9F97 0x6CD3 # <CJK> +0x9F98 0x6CBD # <CJK> +0x9F99 0x6CD7 # <CJK> +0x9F9A 0x6CC5 # <CJK> +0x9F9B 0x6CDD # <CJK> +0x9F9C 0x6CAE # <CJK> +0x9F9D 0x6CB1 # <CJK> +0x9F9E 0x6CBE # <CJK> +0x9F9F 0x6CBA # <CJK> +0x9FA0 0x6CDB # <CJK> +0x9FA1 0x6CEF # <CJK> +0x9FA2 0x6CD9 # <CJK> +0x9FA3 0x6CEA # <CJK> +0x9FA4 0x6D1F # <CJK> +0x9FA5 0x884D # <CJK> +0x9FA6 0x6D36 # <CJK> +0x9FA7 0x6D2B # <CJK> +0x9FA8 0x6D3D # <CJK> +0x9FA9 0x6D38 # <CJK> +0x9FAA 0x6D19 # <CJK> +0x9FAB 0x6D35 # <CJK> +0x9FAC 0x6D33 # <CJK> +0x9FAD 0x6D12 # <CJK> +0x9FAE 0x6D0C # <CJK> +0x9FAF 0x6D63 # <CJK> +0x9FB0 0x6D93 # <CJK> +0x9FB1 0x6D64 # <CJK> +0x9FB2 0x6D5A # <CJK> +0x9FB3 0x6D79 # <CJK> +0x9FB4 0x6D59 # <CJK> +0x9FB5 0x6D8E # <CJK> +0x9FB6 0x6D95 # <CJK> +0x9FB7 0x6FE4 # <CJK> +0x9FB8 0x6D85 # <CJK> +0x9FB9 0x6DF9 # <CJK> +0x9FBA 0x6E15 # <CJK> +0x9FBB 0x6E0A # <CJK> +0x9FBC 0x6DB5 # <CJK> +0x9FBD 0x6DC7 # <CJK> +0x9FBE 0x6DE6 # <CJK> +0x9FBF 0x6DB8 # <CJK> +0x9FC0 0x6DC6 # <CJK> +0x9FC1 0x6DEC # <CJK> +0x9FC2 0x6DDE # <CJK> +0x9FC3 0x6DCC # <CJK> +0x9FC4 0x6DE8 # <CJK> +0x9FC5 0x6DD2 # <CJK> +0x9FC6 0x6DC5 # <CJK> +0x9FC7 0x6DFA # <CJK> +0x9FC8 0x6DD9 # <CJK> +0x9FC9 0x6DE4 # <CJK> +0x9FCA 0x6DD5 # <CJK> +0x9FCB 0x6DEA # <CJK> +0x9FCC 0x6DEE # <CJK> +0x9FCD 0x6E2D # <CJK> +0x9FCE 0x6E6E # <CJK> +0x9FCF 0x6E2E # <CJK> +0x9FD0 0x6E19 # <CJK> +0x9FD1 0x6E72 # <CJK> +0x9FD2 0x6E5F # <CJK> +0x9FD3 0x6E3E # <CJK> +0x9FD4 0x6E23 # <CJK> +0x9FD5 0x6E6B # <CJK> +0x9FD6 0x6E2B # <CJK> +0x9FD7 0x6E76 # <CJK> +0x9FD8 0x6E4D # <CJK> +0x9FD9 0x6E1F # <CJK> +0x9FDA 0x6E43 # <CJK> +0x9FDB 0x6E3A # <CJK> +0x9FDC 0x6E4E # <CJK> +0x9FDD 0x6E24 # <CJK> +0x9FDE 0x6EFF # <CJK> +0x9FDF 0x6E1D # <CJK> +0x9FE0 0x6E38 # <CJK> +0x9FE1 0x6E82 # <CJK> +0x9FE2 0x6EAA # <CJK> +0x9FE3 0x6E98 # <CJK> +0x9FE4 0x6EC9 # <CJK> +0x9FE5 0x6EB7 # <CJK> +0x9FE6 0x6ED3 # <CJK> +0x9FE7 0x6EBD # <CJK> +0x9FE8 0x6EAF # <CJK> +0x9FE9 0x6EC4 # <CJK> +0x9FEA 0x6EB2 # <CJK> +0x9FEB 0x6ED4 # <CJK> +0x9FEC 0x6ED5 # <CJK> +0x9FED 0x6E8F # <CJK> +0x9FEE 0x6EA5 # <CJK> +0x9FEF 0x6EC2 # <CJK> +0x9FF0 0x6E9F # <CJK> +0x9FF1 0x6F41 # <CJK> +0x9FF2 0x6F11 # <CJK> +0x9FF3 0x704C # <CJK> +0x9FF4 0x6EEC # <CJK> +0x9FF5 0x6EF8 # <CJK> +0x9FF6 0x6EFE # <CJK> +0x9FF7 0x6F3F # <CJK> +0x9FF8 0x6EF2 # <CJK> +0x9FF9 0x6F31 # <CJK> +0x9FFA 0x6EEF # <CJK> +0x9FFB 0x6F32 # <CJK> +0x9FFC 0x6ECC # <CJK> +0xA1 0xFF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 0xFF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 0xFF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 0xFF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 0xFF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 0xFF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 0xFF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 0xFF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA 0xFF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB 0xFF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC 0xFF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD 0xFF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE 0xFF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF 0xFF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 0xFF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 0xFF71 # HALFWIDTH KATAKANA LETTER A +0xB2 0xFF72 # HALFWIDTH KATAKANA LETTER I +0xB3 0xFF73 # HALFWIDTH KATAKANA LETTER U +0xB4 0xFF74 # HALFWIDTH KATAKANA LETTER E +0xB5 0xFF75 # HALFWIDTH KATAKANA LETTER O +0xB6 0xFF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 0xFF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 0xFF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 0xFF79 # HALFWIDTH KATAKANA LETTER KE +0xBA 0xFF7A # HALFWIDTH KATAKANA LETTER KO +0xBB 0xFF7B # HALFWIDTH KATAKANA LETTER SA +0xBC 0xFF7C # HALFWIDTH KATAKANA LETTER SI +0xBD 0xFF7D # HALFWIDTH KATAKANA LETTER SU +0xBE 0xFF7E # HALFWIDTH KATAKANA LETTER SE +0xBF 0xFF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 0xFF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 0xFF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 0xFF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 0xFF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 0xFF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 0xFF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 0xFF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 0xFF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 0xFF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 0xFF89 # HALFWIDTH KATAKANA LETTER NO +0xCA 0xFF8A # HALFWIDTH KATAKANA LETTER HA +0xCB 0xFF8B # HALFWIDTH KATAKANA LETTER HI +0xCC 0xFF8C # HALFWIDTH KATAKANA LETTER HU +0xCD 0xFF8D # HALFWIDTH KATAKANA LETTER HE +0xCE 0xFF8E # HALFWIDTH KATAKANA LETTER HO +0xCF 0xFF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 0xFF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 0xFF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 0xFF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 0xFF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 0xFF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 0xFF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 0xFF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 0xFF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 0xFF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 0xFF99 # HALFWIDTH KATAKANA LETTER RU +0xDA 0xFF9A # HALFWIDTH KATAKANA LETTER RE +0xDB 0xFF9B # HALFWIDTH KATAKANA LETTER RO +0xDC 0xFF9C # HALFWIDTH KATAKANA LETTER WA +0xDD 0xFF9D # HALFWIDTH KATAKANA LETTER N +0xDE 0xFF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF 0xFF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +0xE040 0x6F3E # <CJK> +0xE041 0x6F13 # <CJK> +0xE042 0x6EF7 # <CJK> +0xE043 0x6F86 # <CJK> +0xE044 0x6F7A # <CJK> +0xE045 0x6F78 # <CJK> +0xE046 0x6F81 # <CJK> +0xE047 0x6F80 # <CJK> +0xE048 0x6F6F # <CJK> +0xE049 0x6F5B # <CJK> +0xE04A 0x6FF3 # <CJK> +0xE04B 0x6F6D # <CJK> +0xE04C 0x6F82 # <CJK> +0xE04D 0x6F7C # <CJK> +0xE04E 0x6F58 # <CJK> +0xE04F 0x6F8E # <CJK> +0xE050 0x6F91 # <CJK> +0xE051 0x6FC2 # <CJK> +0xE052 0x6F66 # <CJK> +0xE053 0x6FB3 # <CJK> +0xE054 0x6FA3 # <CJK> +0xE055 0x6FA1 # <CJK> +0xE056 0x6FA4 # <CJK> +0xE057 0x6FB9 # <CJK> +0xE058 0x6FC6 # <CJK> +0xE059 0x6FAA # <CJK> +0xE05A 0x6FDF # <CJK> +0xE05B 0x6FD5 # <CJK> +0xE05C 0x6FEC # <CJK> +0xE05D 0x6FD4 # <CJK> +0xE05E 0x6FD8 # <CJK> +0xE05F 0x6FF1 # <CJK> +0xE060 0x6FEE # <CJK> +0xE061 0x6FDB # <CJK> +0xE062 0x7009 # <CJK> +0xE063 0x700B # <CJK> +0xE064 0x6FFA # <CJK> +0xE065 0x7011 # <CJK> +0xE066 0x7001 # <CJK> +0xE067 0x700F # <CJK> +0xE068 0x6FFE # <CJK> +0xE069 0x701B # <CJK> +0xE06A 0x701A # <CJK> +0xE06B 0x6F74 # <CJK> +0xE06C 0x701D # <CJK> +0xE06D 0x7018 # <CJK> +0xE06E 0x701F # <CJK> +0xE06F 0x7030 # <CJK> +0xE070 0x703E # <CJK> +0xE071 0x7032 # <CJK> +0xE072 0x7051 # <CJK> +0xE073 0x7063 # <CJK> +0xE074 0x7099 # <CJK> +0xE075 0x7092 # <CJK> +0xE076 0x70AF # <CJK> +0xE077 0x70F1 # <CJK> +0xE078 0x70AC # <CJK> +0xE079 0x70B8 # <CJK> +0xE07A 0x70B3 # <CJK> +0xE07B 0x70AE # <CJK> +0xE07C 0x70DF # <CJK> +0xE07D 0x70CB # <CJK> +0xE07E 0x70DD # <CJK> +0xE080 0x70D9 # <CJK> +0xE081 0x7109 # <CJK> +0xE082 0x70FD # <CJK> +0xE083 0x711C # <CJK> +0xE084 0x7119 # <CJK> +0xE085 0x7165 # <CJK> +0xE086 0x7155 # <CJK> +0xE087 0x7188 # <CJK> +0xE088 0x7166 # <CJK> +0xE089 0x7162 # <CJK> +0xE08A 0x714C # <CJK> +0xE08B 0x7156 # <CJK> +0xE08C 0x716C # <CJK> +0xE08D 0x718F # <CJK> +0xE08E 0x71FB # <CJK> +0xE08F 0x7184 # <CJK> +0xE090 0x7195 # <CJK> +0xE091 0x71A8 # <CJK> +0xE092 0x71AC # <CJK> +0xE093 0x71D7 # <CJK> +0xE094 0x71B9 # <CJK> +0xE095 0x71BE # <CJK> +0xE096 0x71D2 # <CJK> +0xE097 0x71C9 # <CJK> +0xE098 0x71D4 # <CJK> +0xE099 0x71CE # <CJK> +0xE09A 0x71E0 # <CJK> +0xE09B 0x71EC # <CJK> +0xE09C 0x71E7 # <CJK> +0xE09D 0x71F5 # <CJK> +0xE09E 0x71FC # <CJK> +0xE09F 0x71F9 # <CJK> +0xE0A0 0x71FF # <CJK> +0xE0A1 0x720D # <CJK> +0xE0A2 0x7210 # <CJK> +0xE0A3 0x721B # <CJK> +0xE0A4 0x7228 # <CJK> +0xE0A5 0x722D # <CJK> +0xE0A6 0x722C # <CJK> +0xE0A7 0x7230 # <CJK> +0xE0A8 0x7232 # <CJK> +0xE0A9 0x723B # <CJK> +0xE0AA 0x723C # <CJK> +0xE0AB 0x723F # <CJK> +0xE0AC 0x7240 # <CJK> +0xE0AD 0x7246 # <CJK> +0xE0AE 0x724B # <CJK> +0xE0AF 0x7258 # <CJK> +0xE0B0 0x7274 # <CJK> +0xE0B1 0x727E # <CJK> +0xE0B2 0x7282 # <CJK> +0xE0B3 0x7281 # <CJK> +0xE0B4 0x7287 # <CJK> +0xE0B5 0x7292 # <CJK> +0xE0B6 0x7296 # <CJK> +0xE0B7 0x72A2 # <CJK> +0xE0B8 0x72A7 # <CJK> +0xE0B9 0x72B9 # <CJK> +0xE0BA 0x72B2 # <CJK> +0xE0BB 0x72C3 # <CJK> +0xE0BC 0x72C6 # <CJK> +0xE0BD 0x72C4 # <CJK> +0xE0BE 0x72CE # <CJK> +0xE0BF 0x72D2 # <CJK> +0xE0C0 0x72E2 # <CJK> +0xE0C1 0x72E0 # <CJK> +0xE0C2 0x72E1 # <CJK> +0xE0C3 0x72F9 # <CJK> +0xE0C4 0x72F7 # <CJK> +0xE0C5 0x500F # <CJK> +0xE0C6 0x7317 # <CJK> +0xE0C7 0x730A # <CJK> +0xE0C8 0x731C # <CJK> +0xE0C9 0x7316 # <CJK> +0xE0CA 0x731D # <CJK> +0xE0CB 0x7334 # <CJK> +0xE0CC 0x732F # <CJK> +0xE0CD 0x7329 # <CJK> +0xE0CE 0x7325 # <CJK> +0xE0CF 0x733E # <CJK> +0xE0D0 0x734E # <CJK> +0xE0D1 0x734F # <CJK> +0xE0D2 0x9ED8 # <CJK> +0xE0D3 0x7357 # <CJK> +0xE0D4 0x736A # <CJK> +0xE0D5 0x7368 # <CJK> +0xE0D6 0x7370 # <CJK> +0xE0D7 0x7378 # <CJK> +0xE0D8 0x7375 # <CJK> +0xE0D9 0x737B # <CJK> +0xE0DA 0x737A # <CJK> +0xE0DB 0x73C8 # <CJK> +0xE0DC 0x73B3 # <CJK> +0xE0DD 0x73CE # <CJK> +0xE0DE 0x73BB # <CJK> +0xE0DF 0x73C0 # <CJK> +0xE0E0 0x73E5 # <CJK> +0xE0E1 0x73EE # <CJK> +0xE0E2 0x73DE # <CJK> +0xE0E3 0x74A2 # <CJK> +0xE0E4 0x7405 # <CJK> +0xE0E5 0x746F # <CJK> +0xE0E6 0x7425 # <CJK> +0xE0E7 0x73F8 # <CJK> +0xE0E8 0x7432 # <CJK> +0xE0E9 0x743A # <CJK> +0xE0EA 0x7455 # <CJK> +0xE0EB 0x743F # <CJK> +0xE0EC 0x745F # <CJK> +0xE0ED 0x7459 # <CJK> +0xE0EE 0x7441 # <CJK> +0xE0EF 0x745C # <CJK> +0xE0F0 0x7469 # <CJK> +0xE0F1 0x7470 # <CJK> +0xE0F2 0x7463 # <CJK> +0xE0F3 0x746A # <CJK> +0xE0F4 0x7476 # <CJK> +0xE0F5 0x747E # <CJK> +0xE0F6 0x748B # <CJK> +0xE0F7 0x749E # <CJK> +0xE0F8 0x74A7 # <CJK> +0xE0F9 0x74CA # <CJK> +0xE0FA 0x74CF # <CJK> +0xE0FB 0x74D4 # <CJK> +0xE0FC 0x73F1 # <CJK> +0xE140 0x74E0 # <CJK> +0xE141 0x74E3 # <CJK> +0xE142 0x74E7 # <CJK> +0xE143 0x74E9 # <CJK> +0xE144 0x74EE # <CJK> +0xE145 0x74F2 # <CJK> +0xE146 0x74F0 # <CJK> +0xE147 0x74F1 # <CJK> +0xE148 0x74F8 # <CJK> +0xE149 0x74F7 # <CJK> +0xE14A 0x7504 # <CJK> +0xE14B 0x7503 # <CJK> +0xE14C 0x7505 # <CJK> +0xE14D 0x750C # <CJK> +0xE14E 0x750E # <CJK> +0xE14F 0x750D # <CJK> +0xE150 0x7515 # <CJK> +0xE151 0x7513 # <CJK> +0xE152 0x751E # <CJK> +0xE153 0x7526 # <CJK> +0xE154 0x752C # <CJK> +0xE155 0x753C # <CJK> +0xE156 0x7544 # <CJK> +0xE157 0x754D # <CJK> +0xE158 0x754A # <CJK> +0xE159 0x7549 # <CJK> +0xE15A 0x755B # <CJK> +0xE15B 0x7546 # <CJK> +0xE15C 0x755A # <CJK> +0xE15D 0x7569 # <CJK> +0xE15E 0x7564 # <CJK> +0xE15F 0x7567 # <CJK> +0xE160 0x756B # <CJK> +0xE161 0x756D # <CJK> +0xE162 0x7578 # <CJK> +0xE163 0x7576 # <CJK> +0xE164 0x7586 # <CJK> +0xE165 0x7587 # <CJK> +0xE166 0x7574 # <CJK> +0xE167 0x758A # <CJK> +0xE168 0x7589 # <CJK> +0xE169 0x7582 # <CJK> +0xE16A 0x7594 # <CJK> +0xE16B 0x759A # <CJK> +0xE16C 0x759D # <CJK> +0xE16D 0x75A5 # <CJK> +0xE16E 0x75A3 # <CJK> +0xE16F 0x75C2 # <CJK> +0xE170 0x75B3 # <CJK> +0xE171 0x75C3 # <CJK> +0xE172 0x75B5 # <CJK> +0xE173 0x75BD # <CJK> +0xE174 0x75B8 # <CJK> +0xE175 0x75BC # <CJK> +0xE176 0x75B1 # <CJK> +0xE177 0x75CD # <CJK> +0xE178 0x75CA # <CJK> +0xE179 0x75D2 # <CJK> +0xE17A 0x75D9 # <CJK> +0xE17B 0x75E3 # <CJK> +0xE17C 0x75DE # <CJK> +0xE17D 0x75FE # <CJK> +0xE17E 0x75FF # <CJK> +0xE180 0x75FC # <CJK> +0xE181 0x7601 # <CJK> +0xE182 0x75F0 # <CJK> +0xE183 0x75FA # <CJK> +0xE184 0x75F2 # <CJK> +0xE185 0x75F3 # <CJK> +0xE186 0x760B # <CJK> +0xE187 0x760D # <CJK> +0xE188 0x7609 # <CJK> +0xE189 0x761F # <CJK> +0xE18A 0x7627 # <CJK> +0xE18B 0x7620 # <CJK> +0xE18C 0x7621 # <CJK> +0xE18D 0x7622 # <CJK> +0xE18E 0x7624 # <CJK> +0xE18F 0x7634 # <CJK> +0xE190 0x7630 # <CJK> +0xE191 0x763B # <CJK> +0xE192 0x7647 # <CJK> +0xE193 0x7648 # <CJK> +0xE194 0x7646 # <CJK> +0xE195 0x765C # <CJK> +0xE196 0x7658 # <CJK> +0xE197 0x7661 # <CJK> +0xE198 0x7662 # <CJK> +0xE199 0x7668 # <CJK> +0xE19A 0x7669 # <CJK> +0xE19B 0x766A # <CJK> +0xE19C 0x7667 # <CJK> +0xE19D 0x766C # <CJK> +0xE19E 0x7670 # <CJK> +0xE19F 0x7672 # <CJK> +0xE1A0 0x7676 # <CJK> +0xE1A1 0x7678 # <CJK> +0xE1A2 0x767C # <CJK> +0xE1A3 0x7680 # <CJK> +0xE1A4 0x7683 # <CJK> +0xE1A5 0x7688 # <CJK> +0xE1A6 0x768B # <CJK> +0xE1A7 0x768E # <CJK> +0xE1A8 0x7696 # <CJK> +0xE1A9 0x7693 # <CJK> +0xE1AA 0x7699 # <CJK> +0xE1AB 0x769A # <CJK> +0xE1AC 0x76B0 # <CJK> +0xE1AD 0x76B4 # <CJK> +0xE1AE 0x76B8 # <CJK> +0xE1AF 0x76B9 # <CJK> +0xE1B0 0x76BA # <CJK> +0xE1B1 0x76C2 # <CJK> +0xE1B2 0x76CD # <CJK> +0xE1B3 0x76D6 # <CJK> +0xE1B4 0x76D2 # <CJK> +0xE1B5 0x76DE # <CJK> +0xE1B6 0x76E1 # <CJK> +0xE1B7 0x76E5 # <CJK> +0xE1B8 0x76E7 # <CJK> +0xE1B9 0x76EA # <CJK> +0xE1BA 0x862F # <CJK> +0xE1BB 0x76FB # <CJK> +0xE1BC 0x7708 # <CJK> +0xE1BD 0x7707 # <CJK> +0xE1BE 0x7704 # <CJK> +0xE1BF 0x7729 # <CJK> +0xE1C0 0x7724 # <CJK> +0xE1C1 0x771E # <CJK> +0xE1C2 0x7725 # <CJK> +0xE1C3 0x7726 # <CJK> +0xE1C4 0x771B # <CJK> +0xE1C5 0x7737 # <CJK> +0xE1C6 0x7738 # <CJK> +0xE1C7 0x7747 # <CJK> +0xE1C8 0x775A # <CJK> +0xE1C9 0x7768 # <CJK> +0xE1CA 0x776B # <CJK> +0xE1CB 0x775B # <CJK> +0xE1CC 0x7765 # <CJK> +0xE1CD 0x777F # <CJK> +0xE1CE 0x777E # <CJK> +0xE1CF 0x7779 # <CJK> +0xE1D0 0x778E # <CJK> +0xE1D1 0x778B # <CJK> +0xE1D2 0x7791 # <CJK> +0xE1D3 0x77A0 # <CJK> +0xE1D4 0x779E # <CJK> +0xE1D5 0x77B0 # <CJK> +0xE1D6 0x77B6 # <CJK> +0xE1D7 0x77B9 # <CJK> +0xE1D8 0x77BF # <CJK> +0xE1D9 0x77BC # <CJK> +0xE1DA 0x77BD # <CJK> +0xE1DB 0x77BB # <CJK> +0xE1DC 0x77C7 # <CJK> +0xE1DD 0x77CD # <CJK> +0xE1DE 0x77D7 # <CJK> +0xE1DF 0x77DA # <CJK> +0xE1E0 0x77DC # <CJK> +0xE1E1 0x77E3 # <CJK> +0xE1E2 0x77EE # <CJK> +0xE1E3 0x77FC # <CJK> +0xE1E4 0x780C # <CJK> +0xE1E5 0x7812 # <CJK> +0xE1E6 0x7926 # <CJK> +0xE1E7 0x7820 # <CJK> +0xE1E8 0x792A # <CJK> +0xE1E9 0x7845 # <CJK> +0xE1EA 0x788E # <CJK> +0xE1EB 0x7874 # <CJK> +0xE1EC 0x7886 # <CJK> +0xE1ED 0x787C # <CJK> +0xE1EE 0x789A # <CJK> +0xE1EF 0x788C # <CJK> +0xE1F0 0x78A3 # <CJK> +0xE1F1 0x78B5 # <CJK> +0xE1F2 0x78AA # <CJK> +0xE1F3 0x78AF # <CJK> +0xE1F4 0x78D1 # <CJK> +0xE1F5 0x78C6 # <CJK> +0xE1F6 0x78CB # <CJK> +0xE1F7 0x78D4 # <CJK> +0xE1F8 0x78BE # <CJK> +0xE1F9 0x78BC # <CJK> +0xE1FA 0x78C5 # <CJK> +0xE1FB 0x78CA # <CJK> +0xE1FC 0x78EC # <CJK> +0xE240 0x78E7 # <CJK> +0xE241 0x78DA # <CJK> +0xE242 0x78FD # <CJK> +0xE243 0x78F4 # <CJK> +0xE244 0x7907 # <CJK> +0xE245 0x7912 # <CJK> +0xE246 0x7911 # <CJK> +0xE247 0x7919 # <CJK> +0xE248 0x792C # <CJK> +0xE249 0x792B # <CJK> +0xE24A 0x7940 # <CJK> +0xE24B 0x7960 # <CJK> +0xE24C 0x7957 # <CJK> +0xE24D 0x795F # <CJK> +0xE24E 0x795A # <CJK> +0xE24F 0x7955 # <CJK> +0xE250 0x7953 # <CJK> +0xE251 0x797A # <CJK> +0xE252 0x797F # <CJK> +0xE253 0x798A # <CJK> +0xE254 0x799D # <CJK> +0xE255 0x79A7 # <CJK> +0xE256 0x9F4B # <CJK> +0xE257 0x79AA # <CJK> +0xE258 0x79AE # <CJK> +0xE259 0x79B3 # <CJK> +0xE25A 0x79B9 # <CJK> +0xE25B 0x79BA # <CJK> +0xE25C 0x79C9 # <CJK> +0xE25D 0x79D5 # <CJK> +0xE25E 0x79E7 # <CJK> +0xE25F 0x79EC # <CJK> +0xE260 0x79E1 # <CJK> +0xE261 0x79E3 # <CJK> +0xE262 0x7A08 # <CJK> +0xE263 0x7A0D # <CJK> +0xE264 0x7A18 # <CJK> +0xE265 0x7A19 # <CJK> +0xE266 0x7A20 # <CJK> +0xE267 0x7A1F # <CJK> +0xE268 0x7980 # <CJK> +0xE269 0x7A31 # <CJK> +0xE26A 0x7A3B # <CJK> +0xE26B 0x7A3E # <CJK> +0xE26C 0x7A37 # <CJK> +0xE26D 0x7A43 # <CJK> +0xE26E 0x7A57 # <CJK> +0xE26F 0x7A49 # <CJK> +0xE270 0x7A61 # <CJK> +0xE271 0x7A62 # <CJK> +0xE272 0x7A69 # <CJK> +0xE273 0x9F9D # <CJK> +0xE274 0x7A70 # <CJK> +0xE275 0x7A79 # <CJK> +0xE276 0x7A7D # <CJK> +0xE277 0x7A88 # <CJK> +0xE278 0x7A97 # <CJK> +0xE279 0x7A95 # <CJK> +0xE27A 0x7A98 # <CJK> +0xE27B 0x7A96 # <CJK> +0xE27C 0x7AA9 # <CJK> +0xE27D 0x7AC8 # <CJK> +0xE27E 0x7AB0 # <CJK> +0xE280 0x7AB6 # <CJK> +0xE281 0x7AC5 # <CJK> +0xE282 0x7AC4 # <CJK> +0xE283 0x7ABF # <CJK> +0xE284 0x9083 # <CJK> +0xE285 0x7AC7 # <CJK> +0xE286 0x7ACA # <CJK> +0xE287 0x7ACD # <CJK> +0xE288 0x7ACF # <CJK> +0xE289 0x7AD5 # <CJK> +0xE28A 0x7AD3 # <CJK> +0xE28B 0x7AD9 # <CJK> +0xE28C 0x7ADA # <CJK> +0xE28D 0x7ADD # <CJK> +0xE28E 0x7AE1 # <CJK> +0xE28F 0x7AE2 # <CJK> +0xE290 0x7AE6 # <CJK> +0xE291 0x7AED # <CJK> +0xE292 0x7AF0 # <CJK> +0xE293 0x7B02 # <CJK> +0xE294 0x7B0F # <CJK> +0xE295 0x7B0A # <CJK> +0xE296 0x7B06 # <CJK> +0xE297 0x7B33 # <CJK> +0xE298 0x7B18 # <CJK> +0xE299 0x7B19 # <CJK> +0xE29A 0x7B1E # <CJK> +0xE29B 0x7B35 # <CJK> +0xE29C 0x7B28 # <CJK> +0xE29D 0x7B36 # <CJK> +0xE29E 0x7B50 # <CJK> +0xE29F 0x7B7A # <CJK> +0xE2A0 0x7B04 # <CJK> +0xE2A1 0x7B4D # <CJK> +0xE2A2 0x7B0B # <CJK> +0xE2A3 0x7B4C # <CJK> +0xE2A4 0x7B45 # <CJK> +0xE2A5 0x7B75 # <CJK> +0xE2A6 0x7B65 # <CJK> +0xE2A7 0x7B74 # <CJK> +0xE2A8 0x7B67 # <CJK> +0xE2A9 0x7B70 # <CJK> +0xE2AA 0x7B71 # <CJK> +0xE2AB 0x7B6C # <CJK> +0xE2AC 0x7B6E # <CJK> +0xE2AD 0x7B9D # <CJK> +0xE2AE 0x7B98 # <CJK> +0xE2AF 0x7B9F # <CJK> +0xE2B0 0x7B8D # <CJK> +0xE2B1 0x7B9C # <CJK> +0xE2B2 0x7B9A # <CJK> +0xE2B3 0x7B8B # <CJK> +0xE2B4 0x7B92 # <CJK> +0xE2B5 0x7B8F # <CJK> +0xE2B6 0x7B5D # <CJK> +0xE2B7 0x7B99 # <CJK> +0xE2B8 0x7BCB # <CJK> +0xE2B9 0x7BC1 # <CJK> +0xE2BA 0x7BCC # <CJK> +0xE2BB 0x7BCF # <CJK> +0xE2BC 0x7BB4 # <CJK> +0xE2BD 0x7BC6 # <CJK> +0xE2BE 0x7BDD # <CJK> +0xE2BF 0x7BE9 # <CJK> +0xE2C0 0x7C11 # <CJK> +0xE2C1 0x7C14 # <CJK> +0xE2C2 0x7BE6 # <CJK> +0xE2C3 0x7BE5 # <CJK> +0xE2C4 0x7C60 # <CJK> +0xE2C5 0x7C00 # <CJK> +0xE2C6 0x7C07 # <CJK> +0xE2C7 0x7C13 # <CJK> +0xE2C8 0x7BF3 # <CJK> +0xE2C9 0x7BF7 # <CJK> +0xE2CA 0x7C17 # <CJK> +0xE2CB 0x7C0D # <CJK> +0xE2CC 0x7BF6 # <CJK> +0xE2CD 0x7C23 # <CJK> +0xE2CE 0x7C27 # <CJK> +0xE2CF 0x7C2A # <CJK> +0xE2D0 0x7C1F # <CJK> +0xE2D1 0x7C37 # <CJK> +0xE2D2 0x7C2B # <CJK> +0xE2D3 0x7C3D # <CJK> +0xE2D4 0x7C4C # <CJK> +0xE2D5 0x7C43 # <CJK> +0xE2D6 0x7C54 # <CJK> +0xE2D7 0x7C4F # <CJK> +0xE2D8 0x7C40 # <CJK> +0xE2D9 0x7C50 # <CJK> +0xE2DA 0x7C58 # <CJK> +0xE2DB 0x7C5F # <CJK> +0xE2DC 0x7C64 # <CJK> +0xE2DD 0x7C56 # <CJK> +0xE2DE 0x7C65 # <CJK> +0xE2DF 0x7C6C # <CJK> +0xE2E0 0x7C75 # <CJK> +0xE2E1 0x7C83 # <CJK> +0xE2E2 0x7C90 # <CJK> +0xE2E3 0x7CA4 # <CJK> +0xE2E4 0x7CAD # <CJK> +0xE2E5 0x7CA2 # <CJK> +0xE2E6 0x7CAB # <CJK> +0xE2E7 0x7CA1 # <CJK> +0xE2E8 0x7CA8 # <CJK> +0xE2E9 0x7CB3 # <CJK> +0xE2EA 0x7CB2 # <CJK> +0xE2EB 0x7CB1 # <CJK> +0xE2EC 0x7CAE # <CJK> +0xE2ED 0x7CB9 # <CJK> +0xE2EE 0x7CBD # <CJK> +0xE2EF 0x7CC0 # <CJK> +0xE2F0 0x7CC5 # <CJK> +0xE2F1 0x7CC2 # <CJK> +0xE2F2 0x7CD8 # <CJK> +0xE2F3 0x7CD2 # <CJK> +0xE2F4 0x7CDC # <CJK> +0xE2F5 0x7CE2 # <CJK> +0xE2F6 0x9B3B # <CJK> +0xE2F7 0x7CEF # <CJK> +0xE2F8 0x7CF2 # <CJK> +0xE2F9 0x7CF4 # <CJK> +0xE2FA 0x7CF6 # <CJK> +0xE2FB 0x7CFA # <CJK> +0xE2FC 0x7D06 # <CJK> +0xE340 0x7D02 # <CJK> +0xE341 0x7D1C # <CJK> +0xE342 0x7D15 # <CJK> +0xE343 0x7D0A # <CJK> +0xE344 0x7D45 # <CJK> +0xE345 0x7D4B # <CJK> +0xE346 0x7D2E # <CJK> +0xE347 0x7D32 # <CJK> +0xE348 0x7D3F # <CJK> +0xE349 0x7D35 # <CJK> +0xE34A 0x7D46 # <CJK> +0xE34B 0x7D73 # <CJK> +0xE34C 0x7D56 # <CJK> +0xE34D 0x7D4E # <CJK> +0xE34E 0x7D72 # <CJK> +0xE34F 0x7D68 # <CJK> +0xE350 0x7D6E # <CJK> +0xE351 0x7D4F # <CJK> +0xE352 0x7D63 # <CJK> +0xE353 0x7D93 # <CJK> +0xE354 0x7D89 # <CJK> +0xE355 0x7D5B # <CJK> +0xE356 0x7D8F # <CJK> +0xE357 0x7D7D # <CJK> +0xE358 0x7D9B # <CJK> +0xE359 0x7DBA # <CJK> +0xE35A 0x7DAE # <CJK> +0xE35B 0x7DA3 # <CJK> +0xE35C 0x7DB5 # <CJK> +0xE35D 0x7DC7 # <CJK> +0xE35E 0x7DBD # <CJK> +0xE35F 0x7DAB # <CJK> +0xE360 0x7E3D # <CJK> +0xE361 0x7DA2 # <CJK> +0xE362 0x7DAF # <CJK> +0xE363 0x7DDC # <CJK> +0xE364 0x7DB8 # <CJK> +0xE365 0x7D9F # <CJK> +0xE366 0x7DB0 # <CJK> +0xE367 0x7DD8 # <CJK> +0xE368 0x7DDD # <CJK> +0xE369 0x7DE4 # <CJK> +0xE36A 0x7DDE # <CJK> +0xE36B 0x7DFB # <CJK> +0xE36C 0x7DF2 # <CJK> +0xE36D 0x7DE1 # <CJK> +0xE36E 0x7E05 # <CJK> +0xE36F 0x7E0A # <CJK> +0xE370 0x7E23 # <CJK> +0xE371 0x7E21 # <CJK> +0xE372 0x7E12 # <CJK> +0xE373 0x7E31 # <CJK> +0xE374 0x7E1F # <CJK> +0xE375 0x7E09 # <CJK> +0xE376 0x7E0B # <CJK> +0xE377 0x7E22 # <CJK> +0xE378 0x7E46 # <CJK> +0xE379 0x7E66 # <CJK> +0xE37A 0x7E3B # <CJK> +0xE37B 0x7E35 # <CJK> +0xE37C 0x7E39 # <CJK> +0xE37D 0x7E43 # <CJK> +0xE37E 0x7E37 # <CJK> +0xE380 0x7E32 # <CJK> +0xE381 0x7E3A # <CJK> +0xE382 0x7E67 # <CJK> +0xE383 0x7E5D # <CJK> +0xE384 0x7E56 # <CJK> +0xE385 0x7E5E # <CJK> +0xE386 0x7E59 # <CJK> +0xE387 0x7E5A # <CJK> +0xE388 0x7E79 # <CJK> +0xE389 0x7E6A # <CJK> +0xE38A 0x7E69 # <CJK> +0xE38B 0x7E7C # <CJK> +0xE38C 0x7E7B # <CJK> +0xE38D 0x7E83 # <CJK> +0xE38E 0x7DD5 # <CJK> +0xE38F 0x7E7D # <CJK> +0xE390 0x8FAE # <CJK> +0xE391 0x7E7F # <CJK> +0xE392 0x7E88 # <CJK> +0xE393 0x7E89 # <CJK> +0xE394 0x7E8C # <CJK> +0xE395 0x7E92 # <CJK> +0xE396 0x7E90 # <CJK> +0xE397 0x7E93 # <CJK> +0xE398 0x7E94 # <CJK> +0xE399 0x7E96 # <CJK> +0xE39A 0x7E8E # <CJK> +0xE39B 0x7E9B # <CJK> +0xE39C 0x7E9C # <CJK> +0xE39D 0x7F38 # <CJK> +0xE39E 0x7F3A # <CJK> +0xE39F 0x7F45 # <CJK> +0xE3A0 0x7F4C # <CJK> +0xE3A1 0x7F4D # <CJK> +0xE3A2 0x7F4E # <CJK> +0xE3A3 0x7F50 # <CJK> +0xE3A4 0x7F51 # <CJK> +0xE3A5 0x7F55 # <CJK> +0xE3A6 0x7F54 # <CJK> +0xE3A7 0x7F58 # <CJK> +0xE3A8 0x7F5F # <CJK> +0xE3A9 0x7F60 # <CJK> +0xE3AA 0x7F68 # <CJK> +0xE3AB 0x7F69 # <CJK> +0xE3AC 0x7F67 # <CJK> +0xE3AD 0x7F78 # <CJK> +0xE3AE 0x7F82 # <CJK> +0xE3AF 0x7F86 # <CJK> +0xE3B0 0x7F83 # <CJK> +0xE3B1 0x7F88 # <CJK> +0xE3B2 0x7F87 # <CJK> +0xE3B3 0x7F8C # <CJK> +0xE3B4 0x7F94 # <CJK> +0xE3B5 0x7F9E # <CJK> +0xE3B6 0x7F9D # <CJK> +0xE3B7 0x7F9A # <CJK> +0xE3B8 0x7FA3 # <CJK> +0xE3B9 0x7FAF # <CJK> +0xE3BA 0x7FB2 # <CJK> +0xE3BB 0x7FB9 # <CJK> +0xE3BC 0x7FAE # <CJK> +0xE3BD 0x7FB6 # <CJK> +0xE3BE 0x7FB8 # <CJK> +0xE3BF 0x8B71 # <CJK> +0xE3C0 0x7FC5 # <CJK> +0xE3C1 0x7FC6 # <CJK> +0xE3C2 0x7FCA # <CJK> +0xE3C3 0x7FD5 # <CJK> +0xE3C4 0x7FD4 # <CJK> +0xE3C5 0x7FE1 # <CJK> +0xE3C6 0x7FE6 # <CJK> +0xE3C7 0x7FE9 # <CJK> +0xE3C8 0x7FF3 # <CJK> +0xE3C9 0x7FF9 # <CJK> +0xE3CA 0x98DC # <CJK> +0xE3CB 0x8006 # <CJK> +0xE3CC 0x8004 # <CJK> +0xE3CD 0x800B # <CJK> +0xE3CE 0x8012 # <CJK> +0xE3CF 0x8018 # <CJK> +0xE3D0 0x8019 # <CJK> +0xE3D1 0x801C # <CJK> +0xE3D2 0x8021 # <CJK> +0xE3D3 0x8028 # <CJK> +0xE3D4 0x803F # <CJK> +0xE3D5 0x803B # <CJK> +0xE3D6 0x804A # <CJK> +0xE3D7 0x8046 # <CJK> +0xE3D8 0x8052 # <CJK> +0xE3D9 0x8058 # <CJK> +0xE3DA 0x805A # <CJK> +0xE3DB 0x805F # <CJK> +0xE3DC 0x8062 # <CJK> +0xE3DD 0x8068 # <CJK> +0xE3DE 0x8073 # <CJK> +0xE3DF 0x8072 # <CJK> +0xE3E0 0x8070 # <CJK> +0xE3E1 0x8076 # <CJK> +0xE3E2 0x8079 # <CJK> +0xE3E3 0x807D # <CJK> +0xE3E4 0x807F # <CJK> +0xE3E5 0x8084 # <CJK> +0xE3E6 0x8086 # <CJK> +0xE3E7 0x8085 # <CJK> +0xE3E8 0x809B # <CJK> +0xE3E9 0x8093 # <CJK> +0xE3EA 0x809A # <CJK> +0xE3EB 0x80AD # <CJK> +0xE3EC 0x5190 # <CJK> +0xE3ED 0x80AC # <CJK> +0xE3EE 0x80DB # <CJK> +0xE3EF 0x80E5 # <CJK> +0xE3F0 0x80D9 # <CJK> +0xE3F1 0x80DD # <CJK> +0xE3F2 0x80C4 # <CJK> +0xE3F3 0x80DA # <CJK> +0xE3F4 0x80D6 # <CJK> +0xE3F5 0x8109 # <CJK> +0xE3F6 0x80EF # <CJK> +0xE3F7 0x80F1 # <CJK> +0xE3F8 0x811B # <CJK> +0xE3F9 0x8129 # <CJK> +0xE3FA 0x8123 # <CJK> +0xE3FB 0x812F # <CJK> +0xE3FC 0x814B # <CJK> +0xE440 0x968B # <CJK> +0xE441 0x8146 # <CJK> +0xE442 0x813E # <CJK> +0xE443 0x8153 # <CJK> +0xE444 0x8151 # <CJK> +0xE445 0x80FC # <CJK> +0xE446 0x8171 # <CJK> +0xE447 0x816E # <CJK> +0xE448 0x8165 # <CJK> +0xE449 0x8166 # <CJK> +0xE44A 0x8174 # <CJK> +0xE44B 0x8183 # <CJK> +0xE44C 0x8188 # <CJK> +0xE44D 0x818A # <CJK> +0xE44E 0x8180 # <CJK> +0xE44F 0x8182 # <CJK> +0xE450 0x81A0 # <CJK> +0xE451 0x8195 # <CJK> +0xE452 0x81A4 # <CJK> +0xE453 0x81A3 # <CJK> +0xE454 0x815F # <CJK> +0xE455 0x8193 # <CJK> +0xE456 0x81A9 # <CJK> +0xE457 0x81B0 # <CJK> +0xE458 0x81B5 # <CJK> +0xE459 0x81BE # <CJK> +0xE45A 0x81B8 # <CJK> +0xE45B 0x81BD # <CJK> +0xE45C 0x81C0 # <CJK> +0xE45D 0x81C2 # <CJK> +0xE45E 0x81BA # <CJK> +0xE45F 0x81C9 # <CJK> +0xE460 0x81CD # <CJK> +0xE461 0x81D1 # <CJK> +0xE462 0x81D9 # <CJK> +0xE463 0x81D8 # <CJK> +0xE464 0x81C8 # <CJK> +0xE465 0x81DA # <CJK> +0xE466 0x81DF # <CJK> +0xE467 0x81E0 # <CJK> +0xE468 0x81E7 # <CJK> +0xE469 0x81FA # <CJK> +0xE46A 0x81FB # <CJK> +0xE46B 0x81FE # <CJK> +0xE46C 0x8201 # <CJK> +0xE46D 0x8202 # <CJK> +0xE46E 0x8205 # <CJK> +0xE46F 0x8207 # <CJK> +0xE470 0x820A # <CJK> +0xE471 0x820D # <CJK> +0xE472 0x8210 # <CJK> +0xE473 0x8216 # <CJK> +0xE474 0x8229 # <CJK> +0xE475 0x822B # <CJK> +0xE476 0x8238 # <CJK> +0xE477 0x8233 # <CJK> +0xE478 0x8240 # <CJK> +0xE479 0x8259 # <CJK> +0xE47A 0x8258 # <CJK> +0xE47B 0x825D # <CJK> +0xE47C 0x825A # <CJK> +0xE47D 0x825F # <CJK> +0xE47E 0x8264 # <CJK> +0xE480 0x8262 # <CJK> +0xE481 0x8268 # <CJK> +0xE482 0x826A # <CJK> +0xE483 0x826B # <CJK> +0xE484 0x822E # <CJK> +0xE485 0x8271 # <CJK> +0xE486 0x8277 # <CJK> +0xE487 0x8278 # <CJK> +0xE488 0x827E # <CJK> +0xE489 0x828D # <CJK> +0xE48A 0x8292 # <CJK> +0xE48B 0x82AB # <CJK> +0xE48C 0x829F # <CJK> +0xE48D 0x82BB # <CJK> +0xE48E 0x82AC # <CJK> +0xE48F 0x82E1 # <CJK> +0xE490 0x82E3 # <CJK> +0xE491 0x82DF # <CJK> +0xE492 0x82D2 # <CJK> +0xE493 0x82F4 # <CJK> +0xE494 0x82F3 # <CJK> +0xE495 0x82FA # <CJK> +0xE496 0x8393 # <CJK> +0xE497 0x8303 # <CJK> +0xE498 0x82FB # <CJK> +0xE499 0x82F9 # <CJK> +0xE49A 0x82DE # <CJK> +0xE49B 0x8306 # <CJK> +0xE49C 0x82DC # <CJK> +0xE49D 0x8309 # <CJK> +0xE49E 0x82D9 # <CJK> +0xE49F 0x8335 # <CJK> +0xE4A0 0x8334 # <CJK> +0xE4A1 0x8316 # <CJK> +0xE4A2 0x8332 # <CJK> +0xE4A3 0x8331 # <CJK> +0xE4A4 0x8340 # <CJK> +0xE4A5 0x8339 # <CJK> +0xE4A6 0x8350 # <CJK> +0xE4A7 0x8345 # <CJK> +0xE4A8 0x832F # <CJK> +0xE4A9 0x832B # <CJK> +0xE4AA 0x8317 # <CJK> +0xE4AB 0x8318 # <CJK> +0xE4AC 0x8385 # <CJK> +0xE4AD 0x839A # <CJK> +0xE4AE 0x83AA # <CJK> +0xE4AF 0x839F # <CJK> +0xE4B0 0x83A2 # <CJK> +0xE4B1 0x8396 # <CJK> +0xE4B2 0x8323 # <CJK> +0xE4B3 0x838E # <CJK> +0xE4B4 0x8387 # <CJK> +0xE4B5 0x838A # <CJK> +0xE4B6 0x837C # <CJK> +0xE4B7 0x83B5 # <CJK> +0xE4B8 0x8373 # <CJK> +0xE4B9 0x8375 # <CJK> +0xE4BA 0x83A0 # <CJK> +0xE4BB 0x8389 # <CJK> +0xE4BC 0x83A8 # <CJK> +0xE4BD 0x83F4 # <CJK> +0xE4BE 0x8413 # <CJK> +0xE4BF 0x83EB # <CJK> +0xE4C0 0x83CE # <CJK> +0xE4C1 0x83FD # <CJK> +0xE4C2 0x8403 # <CJK> +0xE4C3 0x83D8 # <CJK> +0xE4C4 0x840B # <CJK> +0xE4C5 0x83C1 # <CJK> +0xE4C6 0x83F7 # <CJK> +0xE4C7 0x8407 # <CJK> +0xE4C8 0x83E0 # <CJK> +0xE4C9 0x83F2 # <CJK> +0xE4CA 0x840D # <CJK> +0xE4CB 0x8422 # <CJK> +0xE4CC 0x8420 # <CJK> +0xE4CD 0x83BD # <CJK> +0xE4CE 0x8438 # <CJK> +0xE4CF 0x8506 # <CJK> +0xE4D0 0x83FB # <CJK> +0xE4D1 0x846D # <CJK> +0xE4D2 0x842A # <CJK> +0xE4D3 0x843C # <CJK> +0xE4D4 0x855A # <CJK> +0xE4D5 0x8484 # <CJK> +0xE4D6 0x8477 # <CJK> +0xE4D7 0x846B # <CJK> +0xE4D8 0x84AD # <CJK> +0xE4D9 0x846E # <CJK> +0xE4DA 0x8482 # <CJK> +0xE4DB 0x8469 # <CJK> +0xE4DC 0x8446 # <CJK> +0xE4DD 0x842C # <CJK> +0xE4DE 0x846F # <CJK> +0xE4DF 0x8479 # <CJK> +0xE4E0 0x8435 # <CJK> +0xE4E1 0x84CA # <CJK> +0xE4E2 0x8462 # <CJK> +0xE4E3 0x84B9 # <CJK> +0xE4E4 0x84BF # <CJK> +0xE4E5 0x849F # <CJK> +0xE4E6 0x84D9 # <CJK> +0xE4E7 0x84CD # <CJK> +0xE4E8 0x84BB # <CJK> +0xE4E9 0x84DA # <CJK> +0xE4EA 0x84D0 # <CJK> +0xE4EB 0x84C1 # <CJK> +0xE4EC 0x84C6 # <CJK> +0xE4ED 0x84D6 # <CJK> +0xE4EE 0x84A1 # <CJK> +0xE4EF 0x8521 # <CJK> +0xE4F0 0x84FF # <CJK> +0xE4F1 0x84F4 # <CJK> +0xE4F2 0x8517 # <CJK> +0xE4F3 0x8518 # <CJK> +0xE4F4 0x852C # <CJK> +0xE4F5 0x851F # <CJK> +0xE4F6 0x8515 # <CJK> +0xE4F7 0x8514 # <CJK> +0xE4F8 0x84FC # <CJK> +0xE4F9 0x8540 # <CJK> +0xE4FA 0x8563 # <CJK> +0xE4FB 0x8558 # <CJK> +0xE4FC 0x8548 # <CJK> +0xE540 0x8541 # <CJK> +0xE541 0x8602 # <CJK> +0xE542 0x854B # <CJK> +0xE543 0x8555 # <CJK> +0xE544 0x8580 # <CJK> +0xE545 0x85A4 # <CJK> +0xE546 0x8588 # <CJK> +0xE547 0x8591 # <CJK> +0xE548 0x858A # <CJK> +0xE549 0x85A8 # <CJK> +0xE54A 0x856D # <CJK> +0xE54B 0x8594 # <CJK> +0xE54C 0x859B # <CJK> +0xE54D 0x85EA # <CJK> +0xE54E 0x8587 # <CJK> +0xE54F 0x859C # <CJK> +0xE550 0x8577 # <CJK> +0xE551 0x857E # <CJK> +0xE552 0x8590 # <CJK> +0xE553 0x85C9 # <CJK> +0xE554 0x85BA # <CJK> +0xE555 0x85CF # <CJK> +0xE556 0x85B9 # <CJK> +0xE557 0x85D0 # <CJK> +0xE558 0x85D5 # <CJK> +0xE559 0x85DD # <CJK> +0xE55A 0x85E5 # <CJK> +0xE55B 0x85DC # <CJK> +0xE55C 0x85F9 # <CJK> +0xE55D 0x860A # <CJK> +0xE55E 0x8613 # <CJK> +0xE55F 0x860B # <CJK> +0xE560 0x85FE # <CJK> +0xE561 0x85FA # <CJK> +0xE562 0x8606 # <CJK> +0xE563 0x8622 # <CJK> +0xE564 0x861A # <CJK> +0xE565 0x8630 # <CJK> +0xE566 0x863F # <CJK> +0xE567 0x864D # <CJK> +0xE568 0x4E55 # <CJK> +0xE569 0x8654 # <CJK> +0xE56A 0x865F # <CJK> +0xE56B 0x8667 # <CJK> +0xE56C 0x8671 # <CJK> +0xE56D 0x8693 # <CJK> +0xE56E 0x86A3 # <CJK> +0xE56F 0x86A9 # <CJK> +0xE570 0x86AA # <CJK> +0xE571 0x868B # <CJK> +0xE572 0x868C # <CJK> +0xE573 0x86B6 # <CJK> +0xE574 0x86AF # <CJK> +0xE575 0x86C4 # <CJK> +0xE576 0x86C6 # <CJK> +0xE577 0x86B0 # <CJK> +0xE578 0x86C9 # <CJK> +0xE579 0x8823 # <CJK> +0xE57A 0x86AB # <CJK> +0xE57B 0x86D4 # <CJK> +0xE57C 0x86DE # <CJK> +0xE57D 0x86E9 # <CJK> +0xE57E 0x86EC # <CJK> +0xE580 0x86DF # <CJK> +0xE581 0x86DB # <CJK> +0xE582 0x86EF # <CJK> +0xE583 0x8712 # <CJK> +0xE584 0x8706 # <CJK> +0xE585 0x8708 # <CJK> +0xE586 0x8700 # <CJK> +0xE587 0x8703 # <CJK> +0xE588 0x86FB # <CJK> +0xE589 0x8711 # <CJK> +0xE58A 0x8709 # <CJK> +0xE58B 0x870D # <CJK> +0xE58C 0x86F9 # <CJK> +0xE58D 0x870A # <CJK> +0xE58E 0x8734 # <CJK> +0xE58F 0x873F # <CJK> +0xE590 0x8737 # <CJK> +0xE591 0x873B # <CJK> +0xE592 0x8725 # <CJK> +0xE593 0x8729 # <CJK> +0xE594 0x871A # <CJK> +0xE595 0x8760 # <CJK> +0xE596 0x875F # <CJK> +0xE597 0x8778 # <CJK> +0xE598 0x874C # <CJK> +0xE599 0x874E # <CJK> +0xE59A 0x8774 # <CJK> +0xE59B 0x8757 # <CJK> +0xE59C 0x8768 # <CJK> +0xE59D 0x876E # <CJK> +0xE59E 0x8759 # <CJK> +0xE59F 0x8753 # <CJK> +0xE5A0 0x8763 # <CJK> +0xE5A1 0x876A # <CJK> +0xE5A2 0x8805 # <CJK> +0xE5A3 0x87A2 # <CJK> +0xE5A4 0x879F # <CJK> +0xE5A5 0x8782 # <CJK> +0xE5A6 0x87AF # <CJK> +0xE5A7 0x87CB # <CJK> +0xE5A8 0x87BD # <CJK> +0xE5A9 0x87C0 # <CJK> +0xE5AA 0x87D0 # <CJK> +0xE5AB 0x96D6 # <CJK> +0xE5AC 0x87AB # <CJK> +0xE5AD 0x87C4 # <CJK> +0xE5AE 0x87B3 # <CJK> +0xE5AF 0x87C7 # <CJK> +0xE5B0 0x87C6 # <CJK> +0xE5B1 0x87BB # <CJK> +0xE5B2 0x87EF # <CJK> +0xE5B3 0x87F2 # <CJK> +0xE5B4 0x87E0 # <CJK> +0xE5B5 0x880F # <CJK> +0xE5B6 0x880D # <CJK> +0xE5B7 0x87FE # <CJK> +0xE5B8 0x87F6 # <CJK> +0xE5B9 0x87F7 # <CJK> +0xE5BA 0x880E # <CJK> +0xE5BB 0x87D2 # <CJK> +0xE5BC 0x8811 # <CJK> +0xE5BD 0x8816 # <CJK> +0xE5BE 0x8815 # <CJK> +0xE5BF 0x8822 # <CJK> +0xE5C0 0x8821 # <CJK> +0xE5C1 0x8831 # <CJK> +0xE5C2 0x8836 # <CJK> +0xE5C3 0x8839 # <CJK> +0xE5C4 0x8827 # <CJK> +0xE5C5 0x883B # <CJK> +0xE5C6 0x8844 # <CJK> +0xE5C7 0x8842 # <CJK> +0xE5C8 0x8852 # <CJK> +0xE5C9 0x8859 # <CJK> +0xE5CA 0x885E # <CJK> +0xE5CB 0x8862 # <CJK> +0xE5CC 0x886B # <CJK> +0xE5CD 0x8881 # <CJK> +0xE5CE 0x887E # <CJK> +0xE5CF 0x889E # <CJK> +0xE5D0 0x8875 # <CJK> +0xE5D1 0x887D # <CJK> +0xE5D2 0x88B5 # <CJK> +0xE5D3 0x8872 # <CJK> +0xE5D4 0x8882 # <CJK> +0xE5D5 0x8897 # <CJK> +0xE5D6 0x8892 # <CJK> +0xE5D7 0x88AE # <CJK> +0xE5D8 0x8899 # <CJK> +0xE5D9 0x88A2 # <CJK> +0xE5DA 0x888D # <CJK> +0xE5DB 0x88A4 # <CJK> +0xE5DC 0x88B0 # <CJK> +0xE5DD 0x88BF # <CJK> +0xE5DE 0x88B1 # <CJK> +0xE5DF 0x88C3 # <CJK> +0xE5E0 0x88C4 # <CJK> +0xE5E1 0x88D4 # <CJK> +0xE5E2 0x88D8 # <CJK> +0xE5E3 0x88D9 # <CJK> +0xE5E4 0x88DD # <CJK> +0xE5E5 0x88F9 # <CJK> +0xE5E6 0x8902 # <CJK> +0xE5E7 0x88FC # <CJK> +0xE5E8 0x88F4 # <CJK> +0xE5E9 0x88E8 # <CJK> +0xE5EA 0x88F2 # <CJK> +0xE5EB 0x8904 # <CJK> +0xE5EC 0x890C # <CJK> +0xE5ED 0x890A # <CJK> +0xE5EE 0x8913 # <CJK> +0xE5EF 0x8943 # <CJK> +0xE5F0 0x891E # <CJK> +0xE5F1 0x8925 # <CJK> +0xE5F2 0x892A # <CJK> +0xE5F3 0x892B # <CJK> +0xE5F4 0x8941 # <CJK> +0xE5F5 0x8944 # <CJK> +0xE5F6 0x893B # <CJK> +0xE5F7 0x8936 # <CJK> +0xE5F8 0x8938 # <CJK> +0xE5F9 0x894C # <CJK> +0xE5FA 0x891D # <CJK> +0xE5FB 0x8960 # <CJK> +0xE5FC 0x895E # <CJK> +0xE640 0x8966 # <CJK> +0xE641 0x8964 # <CJK> +0xE642 0x896D # <CJK> +0xE643 0x896A # <CJK> +0xE644 0x896F # <CJK> +0xE645 0x8974 # <CJK> +0xE646 0x8977 # <CJK> +0xE647 0x897E # <CJK> +0xE648 0x8983 # <CJK> +0xE649 0x8988 # <CJK> +0xE64A 0x898A # <CJK> +0xE64B 0x8993 # <CJK> +0xE64C 0x8998 # <CJK> +0xE64D 0x89A1 # <CJK> +0xE64E 0x89A9 # <CJK> +0xE64F 0x89A6 # <CJK> +0xE650 0x89AC # <CJK> +0xE651 0x89AF # <CJK> +0xE652 0x89B2 # <CJK> +0xE653 0x89BA # <CJK> +0xE654 0x89BD # <CJK> +0xE655 0x89BF # <CJK> +0xE656 0x89C0 # <CJK> +0xE657 0x89DA # <CJK> +0xE658 0x89DC # <CJK> +0xE659 0x89DD # <CJK> +0xE65A 0x89E7 # <CJK> +0xE65B 0x89F4 # <CJK> +0xE65C 0x89F8 # <CJK> +0xE65D 0x8A03 # <CJK> +0xE65E 0x8A16 # <CJK> +0xE65F 0x8A10 # <CJK> +0xE660 0x8A0C # <CJK> +0xE661 0x8A1B # <CJK> +0xE662 0x8A1D # <CJK> +0xE663 0x8A25 # <CJK> +0xE664 0x8A36 # <CJK> +0xE665 0x8A41 # <CJK> +0xE666 0x8A5B # <CJK> +0xE667 0x8A52 # <CJK> +0xE668 0x8A46 # <CJK> +0xE669 0x8A48 # <CJK> +0xE66A 0x8A7C # <CJK> +0xE66B 0x8A6D # <CJK> +0xE66C 0x8A6C # <CJK> +0xE66D 0x8A62 # <CJK> +0xE66E 0x8A85 # <CJK> +0xE66F 0x8A82 # <CJK> +0xE670 0x8A84 # <CJK> +0xE671 0x8AA8 # <CJK> +0xE672 0x8AA1 # <CJK> +0xE673 0x8A91 # <CJK> +0xE674 0x8AA5 # <CJK> +0xE675 0x8AA6 # <CJK> +0xE676 0x8A9A # <CJK> +0xE677 0x8AA3 # <CJK> +0xE678 0x8AC4 # <CJK> +0xE679 0x8ACD # <CJK> +0xE67A 0x8AC2 # <CJK> +0xE67B 0x8ADA # <CJK> +0xE67C 0x8AEB # <CJK> +0xE67D 0x8AF3 # <CJK> +0xE67E 0x8AE7 # <CJK> +0xE680 0x8AE4 # <CJK> +0xE681 0x8AF1 # <CJK> +0xE682 0x8B14 # <CJK> +0xE683 0x8AE0 # <CJK> +0xE684 0x8AE2 # <CJK> +0xE685 0x8AF7 # <CJK> +0xE686 0x8ADE # <CJK> +0xE687 0x8ADB # <CJK> +0xE688 0x8B0C # <CJK> +0xE689 0x8B07 # <CJK> +0xE68A 0x8B1A # <CJK> +0xE68B 0x8AE1 # <CJK> +0xE68C 0x8B16 # <CJK> +0xE68D 0x8B10 # <CJK> +0xE68E 0x8B17 # <CJK> +0xE68F 0x8B20 # <CJK> +0xE690 0x8B33 # <CJK> +0xE691 0x97AB # <CJK> +0xE692 0x8B26 # <CJK> +0xE693 0x8B2B # <CJK> +0xE694 0x8B3E # <CJK> +0xE695 0x8B28 # <CJK> +0xE696 0x8B41 # <CJK> +0xE697 0x8B4C # <CJK> +0xE698 0x8B4F # <CJK> +0xE699 0x8B4E # <CJK> +0xE69A 0x8B49 # <CJK> +0xE69B 0x8B56 # <CJK> +0xE69C 0x8B5B # <CJK> +0xE69D 0x8B5A # <CJK> +0xE69E 0x8B6B # <CJK> +0xE69F 0x8B5F # <CJK> +0xE6A0 0x8B6C # <CJK> +0xE6A1 0x8B6F # <CJK> +0xE6A2 0x8B74 # <CJK> +0xE6A3 0x8B7D # <CJK> +0xE6A4 0x8B80 # <CJK> +0xE6A5 0x8B8C # <CJK> +0xE6A6 0x8B8E # <CJK> +0xE6A7 0x8B92 # <CJK> +0xE6A8 0x8B93 # <CJK> +0xE6A9 0x8B96 # <CJK> +0xE6AA 0x8B99 # <CJK> +0xE6AB 0x8B9A # <CJK> +0xE6AC 0x8C3A # <CJK> +0xE6AD 0x8C41 # <CJK> +0xE6AE 0x8C3F # <CJK> +0xE6AF 0x8C48 # <CJK> +0xE6B0 0x8C4C # <CJK> +0xE6B1 0x8C4E # <CJK> +0xE6B2 0x8C50 # <CJK> +0xE6B3 0x8C55 # <CJK> +0xE6B4 0x8C62 # <CJK> +0xE6B5 0x8C6C # <CJK> +0xE6B6 0x8C78 # <CJK> +0xE6B7 0x8C7A # <CJK> +0xE6B8 0x8C82 # <CJK> +0xE6B9 0x8C89 # <CJK> +0xE6BA 0x8C85 # <CJK> +0xE6BB 0x8C8A # <CJK> +0xE6BC 0x8C8D # <CJK> +0xE6BD 0x8C8E # <CJK> +0xE6BE 0x8C94 # <CJK> +0xE6BF 0x8C7C # <CJK> +0xE6C0 0x8C98 # <CJK> +0xE6C1 0x621D # <CJK> +0xE6C2 0x8CAD # <CJK> +0xE6C3 0x8CAA # <CJK> +0xE6C4 0x8CBD # <CJK> +0xE6C5 0x8CB2 # <CJK> +0xE6C6 0x8CB3 # <CJK> +0xE6C7 0x8CAE # <CJK> +0xE6C8 0x8CB6 # <CJK> +0xE6C9 0x8CC8 # <CJK> +0xE6CA 0x8CC1 # <CJK> +0xE6CB 0x8CE4 # <CJK> +0xE6CC 0x8CE3 # <CJK> +0xE6CD 0x8CDA # <CJK> +0xE6CE 0x8CFD # <CJK> +0xE6CF 0x8CFA # <CJK> +0xE6D0 0x8CFB # <CJK> +0xE6D1 0x8D04 # <CJK> +0xE6D2 0x8D05 # <CJK> +0xE6D3 0x8D0A # <CJK> +0xE6D4 0x8D07 # <CJK> +0xE6D5 0x8D0F # <CJK> +0xE6D6 0x8D0D # <CJK> +0xE6D7 0x8D10 # <CJK> +0xE6D8 0x9F4E # <CJK> +0xE6D9 0x8D13 # <CJK> +0xE6DA 0x8CCD # <CJK> +0xE6DB 0x8D14 # <CJK> +0xE6DC 0x8D16 # <CJK> +0xE6DD 0x8D67 # <CJK> +0xE6DE 0x8D6D # <CJK> +0xE6DF 0x8D71 # <CJK> +0xE6E0 0x8D73 # <CJK> +0xE6E1 0x8D81 # <CJK> +0xE6E2 0x8D99 # <CJK> +0xE6E3 0x8DC2 # <CJK> +0xE6E4 0x8DBE # <CJK> +0xE6E5 0x8DBA # <CJK> +0xE6E6 0x8DCF # <CJK> +0xE6E7 0x8DDA # <CJK> +0xE6E8 0x8DD6 # <CJK> +0xE6E9 0x8DCC # <CJK> +0xE6EA 0x8DDB # <CJK> +0xE6EB 0x8DCB # <CJK> +0xE6EC 0x8DEA # <CJK> +0xE6ED 0x8DEB # <CJK> +0xE6EE 0x8DDF # <CJK> +0xE6EF 0x8DE3 # <CJK> +0xE6F0 0x8DFC # <CJK> +0xE6F1 0x8E08 # <CJK> +0xE6F2 0x8E09 # <CJK> +0xE6F3 0x8DFF # <CJK> +0xE6F4 0x8E1D # <CJK> +0xE6F5 0x8E1E # <CJK> +0xE6F6 0x8E10 # <CJK> +0xE6F7 0x8E1F # <CJK> +0xE6F8 0x8E42 # <CJK> +0xE6F9 0x8E35 # <CJK> +0xE6FA 0x8E30 # <CJK> +0xE6FB 0x8E34 # <CJK> +0xE6FC 0x8E4A # <CJK> +0xE740 0x8E47 # <CJK> +0xE741 0x8E49 # <CJK> +0xE742 0x8E4C # <CJK> +0xE743 0x8E50 # <CJK> +0xE744 0x8E48 # <CJK> +0xE745 0x8E59 # <CJK> +0xE746 0x8E64 # <CJK> +0xE747 0x8E60 # <CJK> +0xE748 0x8E2A # <CJK> +0xE749 0x8E63 # <CJK> +0xE74A 0x8E55 # <CJK> +0xE74B 0x8E76 # <CJK> +0xE74C 0x8E72 # <CJK> +0xE74D 0x8E7C # <CJK> +0xE74E 0x8E81 # <CJK> +0xE74F 0x8E87 # <CJK> +0xE750 0x8E85 # <CJK> +0xE751 0x8E84 # <CJK> +0xE752 0x8E8B # <CJK> +0xE753 0x8E8A # <CJK> +0xE754 0x8E93 # <CJK> +0xE755 0x8E91 # <CJK> +0xE756 0x8E94 # <CJK> +0xE757 0x8E99 # <CJK> +0xE758 0x8EAA # <CJK> +0xE759 0x8EA1 # <CJK> +0xE75A 0x8EAC # <CJK> +0xE75B 0x8EB0 # <CJK> +0xE75C 0x8EC6 # <CJK> +0xE75D 0x8EB1 # <CJK> +0xE75E 0x8EBE # <CJK> +0xE75F 0x8EC5 # <CJK> +0xE760 0x8EC8 # <CJK> +0xE761 0x8ECB # <CJK> +0xE762 0x8EDB # <CJK> +0xE763 0x8EE3 # <CJK> +0xE764 0x8EFC # <CJK> +0xE765 0x8EFB # <CJK> +0xE766 0x8EEB # <CJK> +0xE767 0x8EFE # <CJK> +0xE768 0x8F0A # <CJK> +0xE769 0x8F05 # <CJK> +0xE76A 0x8F15 # <CJK> +0xE76B 0x8F12 # <CJK> +0xE76C 0x8F19 # <CJK> +0xE76D 0x8F13 # <CJK> +0xE76E 0x8F1C # <CJK> +0xE76F 0x8F1F # <CJK> +0xE770 0x8F1B # <CJK> +0xE771 0x8F0C # <CJK> +0xE772 0x8F26 # <CJK> +0xE773 0x8F33 # <CJK> +0xE774 0x8F3B # <CJK> +0xE775 0x8F39 # <CJK> +0xE776 0x8F45 # <CJK> +0xE777 0x8F42 # <CJK> +0xE778 0x8F3E # <CJK> +0xE779 0x8F4C # <CJK> +0xE77A 0x8F49 # <CJK> +0xE77B 0x8F46 # <CJK> +0xE77C 0x8F4E # <CJK> +0xE77D 0x8F57 # <CJK> +0xE77E 0x8F5C # <CJK> +0xE780 0x8F62 # <CJK> +0xE781 0x8F63 # <CJK> +0xE782 0x8F64 # <CJK> +0xE783 0x8F9C # <CJK> +0xE784 0x8F9F # <CJK> +0xE785 0x8FA3 # <CJK> +0xE786 0x8FAD # <CJK> +0xE787 0x8FAF # <CJK> +0xE788 0x8FB7 # <CJK> +0xE789 0x8FDA # <CJK> +0xE78A 0x8FE5 # <CJK> +0xE78B 0x8FE2 # <CJK> +0xE78C 0x8FEA # <CJK> +0xE78D 0x8FEF # <CJK> +0xE78E 0x9087 # <CJK> +0xE78F 0x8FF4 # <CJK> +0xE790 0x9005 # <CJK> +0xE791 0x8FF9 # <CJK> +0xE792 0x8FFA # <CJK> +0xE793 0x9011 # <CJK> +0xE794 0x9015 # <CJK> +0xE795 0x9021 # <CJK> +0xE796 0x900D # <CJK> +0xE797 0x901E # <CJK> +0xE798 0x9016 # <CJK> +0xE799 0x900B # <CJK> +0xE79A 0x9027 # <CJK> +0xE79B 0x9036 # <CJK> +0xE79C 0x9035 # <CJK> +0xE79D 0x9039 # <CJK> +0xE79E 0x8FF8 # <CJK> +0xE79F 0x904F # <CJK> +0xE7A0 0x9050 # <CJK> +0xE7A1 0x9051 # <CJK> +0xE7A2 0x9052 # <CJK> +0xE7A3 0x900E # <CJK> +0xE7A4 0x9049 # <CJK> +0xE7A5 0x903E # <CJK> +0xE7A6 0x9056 # <CJK> +0xE7A7 0x9058 # <CJK> +0xE7A8 0x905E # <CJK> +0xE7A9 0x9068 # <CJK> +0xE7AA 0x906F # <CJK> +0xE7AB 0x9076 # <CJK> +0xE7AC 0x96A8 # <CJK> +0xE7AD 0x9072 # <CJK> +0xE7AE 0x9082 # <CJK> +0xE7AF 0x907D # <CJK> +0xE7B0 0x9081 # <CJK> +0xE7B1 0x9080 # <CJK> +0xE7B2 0x908A # <CJK> +0xE7B3 0x9089 # <CJK> +0xE7B4 0x908F # <CJK> +0xE7B5 0x90A8 # <CJK> +0xE7B6 0x90AF # <CJK> +0xE7B7 0x90B1 # <CJK> +0xE7B8 0x90B5 # <CJK> +0xE7B9 0x90E2 # <CJK> +0xE7BA 0x90E4 # <CJK> +0xE7BB 0x6248 # <CJK> +0xE7BC 0x90DB # <CJK> +0xE7BD 0x9102 # <CJK> +0xE7BE 0x9112 # <CJK> +0xE7BF 0x9119 # <CJK> +0xE7C0 0x9132 # <CJK> +0xE7C1 0x9130 # <CJK> +0xE7C2 0x914A # <CJK> +0xE7C3 0x9156 # <CJK> +0xE7C4 0x9158 # <CJK> +0xE7C5 0x9163 # <CJK> +0xE7C6 0x9165 # <CJK> +0xE7C7 0x9169 # <CJK> +0xE7C8 0x9173 # <CJK> +0xE7C9 0x9172 # <CJK> +0xE7CA 0x918B # <CJK> +0xE7CB 0x9189 # <CJK> +0xE7CC 0x9182 # <CJK> +0xE7CD 0x91A2 # <CJK> +0xE7CE 0x91AB # <CJK> +0xE7CF 0x91AF # <CJK> +0xE7D0 0x91AA # <CJK> +0xE7D1 0x91B5 # <CJK> +0xE7D2 0x91B4 # <CJK> +0xE7D3 0x91BA # <CJK> +0xE7D4 0x91C0 # <CJK> +0xE7D5 0x91C1 # <CJK> +0xE7D6 0x91C9 # <CJK> +0xE7D7 0x91CB # <CJK> +0xE7D8 0x91D0 # <CJK> +0xE7D9 0x91D6 # <CJK> +0xE7DA 0x91DF # <CJK> +0xE7DB 0x91E1 # <CJK> +0xE7DC 0x91DB # <CJK> +0xE7DD 0x91FC # <CJK> +0xE7DE 0x91F5 # <CJK> +0xE7DF 0x91F6 # <CJK> +0xE7E0 0x921E # <CJK> +0xE7E1 0x91FF # <CJK> +0xE7E2 0x9214 # <CJK> +0xE7E3 0x922C # <CJK> +0xE7E4 0x9215 # <CJK> +0xE7E5 0x9211 # <CJK> +0xE7E6 0x925E # <CJK> +0xE7E7 0x9257 # <CJK> +0xE7E8 0x9245 # <CJK> +0xE7E9 0x9249 # <CJK> +0xE7EA 0x9264 # <CJK> +0xE7EB 0x9248 # <CJK> +0xE7EC 0x9295 # <CJK> +0xE7ED 0x923F # <CJK> +0xE7EE 0x924B # <CJK> +0xE7EF 0x9250 # <CJK> +0xE7F0 0x929C # <CJK> +0xE7F1 0x9296 # <CJK> +0xE7F2 0x9293 # <CJK> +0xE7F3 0x929B # <CJK> +0xE7F4 0x925A # <CJK> +0xE7F5 0x92CF # <CJK> +0xE7F6 0x92B9 # <CJK> +0xE7F7 0x92B7 # <CJK> +0xE7F8 0x92E9 # <CJK> +0xE7F9 0x930F # <CJK> +0xE7FA 0x92FA # <CJK> +0xE7FB 0x9344 # <CJK> +0xE7FC 0x932E # <CJK> +0xE840 0x9319 # <CJK> +0xE841 0x9322 # <CJK> +0xE842 0x931A # <CJK> +0xE843 0x9323 # <CJK> +0xE844 0x933A # <CJK> +0xE845 0x9335 # <CJK> +0xE846 0x933B # <CJK> +0xE847 0x935C # <CJK> +0xE848 0x9360 # <CJK> +0xE849 0x937C # <CJK> +0xE84A 0x936E # <CJK> +0xE84B 0x9356 # <CJK> +0xE84C 0x93B0 # <CJK> +0xE84D 0x93AC # <CJK> +0xE84E 0x93AD # <CJK> +0xE84F 0x9394 # <CJK> +0xE850 0x93B9 # <CJK> +0xE851 0x93D6 # <CJK> +0xE852 0x93D7 # <CJK> +0xE853 0x93E8 # <CJK> +0xE854 0x93E5 # <CJK> +0xE855 0x93D8 # <CJK> +0xE856 0x93C3 # <CJK> +0xE857 0x93DD # <CJK> +0xE858 0x93D0 # <CJK> +0xE859 0x93C8 # <CJK> +0xE85A 0x93E4 # <CJK> +0xE85B 0x941A # <CJK> +0xE85C 0x9414 # <CJK> +0xE85D 0x9413 # <CJK> +0xE85E 0x9403 # <CJK> +0xE85F 0x9407 # <CJK> +0xE860 0x9410 # <CJK> +0xE861 0x9436 # <CJK> +0xE862 0x942B # <CJK> +0xE863 0x9435 # <CJK> +0xE864 0x9421 # <CJK> +0xE865 0x943A # <CJK> +0xE866 0x9441 # <CJK> +0xE867 0x9452 # <CJK> +0xE868 0x9444 # <CJK> +0xE869 0x945B # <CJK> +0xE86A 0x9460 # <CJK> +0xE86B 0x9462 # <CJK> +0xE86C 0x945E # <CJK> +0xE86D 0x946A # <CJK> +0xE86E 0x9229 # <CJK> +0xE86F 0x9470 # <CJK> +0xE870 0x9475 # <CJK> +0xE871 0x9477 # <CJK> +0xE872 0x947D # <CJK> +0xE873 0x945A # <CJK> +0xE874 0x947C # <CJK> +0xE875 0x947E # <CJK> +0xE876 0x9481 # <CJK> +0xE877 0x947F # <CJK> +0xE878 0x9582 # <CJK> +0xE879 0x9587 # <CJK> +0xE87A 0x958A # <CJK> +0xE87B 0x9594 # <CJK> +0xE87C 0x9596 # <CJK> +0xE87D 0x9598 # <CJK> +0xE87E 0x9599 # <CJK> +0xE880 0x95A0 # <CJK> +0xE881 0x95A8 # <CJK> +0xE882 0x95A7 # <CJK> +0xE883 0x95AD # <CJK> +0xE884 0x95BC # <CJK> +0xE885 0x95BB # <CJK> +0xE886 0x95B9 # <CJK> +0xE887 0x95BE # <CJK> +0xE888 0x95CA # <CJK> +0xE889 0x6FF6 # <CJK> +0xE88A 0x95C3 # <CJK> +0xE88B 0x95CD # <CJK> +0xE88C 0x95CC # <CJK> +0xE88D 0x95D5 # <CJK> +0xE88E 0x95D4 # <CJK> +0xE88F 0x95D6 # <CJK> +0xE890 0x95DC # <CJK> +0xE891 0x95E1 # <CJK> +0xE892 0x95E5 # <CJK> +0xE893 0x95E2 # <CJK> +0xE894 0x9621 # <CJK> +0xE895 0x9628 # <CJK> +0xE896 0x962E # <CJK> +0xE897 0x962F # <CJK> +0xE898 0x9642 # <CJK> +0xE899 0x964C # <CJK> +0xE89A 0x964F # <CJK> +0xE89B 0x964B # <CJK> +0xE89C 0x9677 # <CJK> +0xE89D 0x965C # <CJK> +0xE89E 0x965E # <CJK> +0xE89F 0x965D # <CJK> +0xE8A0 0x965F # <CJK> +0xE8A1 0x9666 # <CJK> +0xE8A2 0x9672 # <CJK> +0xE8A3 0x966C # <CJK> +0xE8A4 0x968D # <CJK> +0xE8A5 0x9698 # <CJK> +0xE8A6 0x9695 # <CJK> +0xE8A7 0x9697 # <CJK> +0xE8A8 0x96AA # <CJK> +0xE8A9 0x96A7 # <CJK> +0xE8AA 0x96B1 # <CJK> +0xE8AB 0x96B2 # <CJK> +0xE8AC 0x96B0 # <CJK> +0xE8AD 0x96B4 # <CJK> +0xE8AE 0x96B6 # <CJK> +0xE8AF 0x96B8 # <CJK> +0xE8B0 0x96B9 # <CJK> +0xE8B1 0x96CE # <CJK> +0xE8B2 0x96CB # <CJK> +0xE8B3 0x96C9 # <CJK> +0xE8B4 0x96CD # <CJK> +0xE8B5 0x894D # <CJK> +0xE8B6 0x96DC # <CJK> +0xE8B7 0x970D # <CJK> +0xE8B8 0x96D5 # <CJK> +0xE8B9 0x96F9 # <CJK> +0xE8BA 0x9704 # <CJK> +0xE8BB 0x9706 # <CJK> +0xE8BC 0x9708 # <CJK> +0xE8BD 0x9713 # <CJK> +0xE8BE 0x970E # <CJK> +0xE8BF 0x9711 # <CJK> +0xE8C0 0x970F # <CJK> +0xE8C1 0x9716 # <CJK> +0xE8C2 0x9719 # <CJK> +0xE8C3 0x9724 # <CJK> +0xE8C4 0x972A # <CJK> +0xE8C5 0x9730 # <CJK> +0xE8C6 0x9739 # <CJK> +0xE8C7 0x973D # <CJK> +0xE8C8 0x973E # <CJK> +0xE8C9 0x9744 # <CJK> +0xE8CA 0x9746 # <CJK> +0xE8CB 0x9748 # <CJK> +0xE8CC 0x9742 # <CJK> +0xE8CD 0x9749 # <CJK> +0xE8CE 0x975C # <CJK> +0xE8CF 0x9760 # <CJK> +0xE8D0 0x9764 # <CJK> +0xE8D1 0x9766 # <CJK> +0xE8D2 0x9768 # <CJK> +0xE8D3 0x52D2 # <CJK> +0xE8D4 0x976B # <CJK> +0xE8D5 0x9771 # <CJK> +0xE8D6 0x9779 # <CJK> +0xE8D7 0x9785 # <CJK> +0xE8D8 0x977C # <CJK> +0xE8D9 0x9781 # <CJK> +0xE8DA 0x977A # <CJK> +0xE8DB 0x9786 # <CJK> +0xE8DC 0x978B # <CJK> +0xE8DD 0x978F # <CJK> +0xE8DE 0x9790 # <CJK> +0xE8DF 0x979C # <CJK> +0xE8E0 0x97A8 # <CJK> +0xE8E1 0x97A6 # <CJK> +0xE8E2 0x97A3 # <CJK> +0xE8E3 0x97B3 # <CJK> +0xE8E4 0x97B4 # <CJK> +0xE8E5 0x97C3 # <CJK> +0xE8E6 0x97C6 # <CJK> +0xE8E7 0x97C8 # <CJK> +0xE8E8 0x97CB # <CJK> +0xE8E9 0x97DC # <CJK> +0xE8EA 0x97ED # <CJK> +0xE8EB 0x9F4F # <CJK> +0xE8EC 0x97F2 # <CJK> +0xE8ED 0x7ADF # <CJK> +0xE8EE 0x97F6 # <CJK> +0xE8EF 0x97F5 # <CJK> +0xE8F0 0x980F # <CJK> +0xE8F1 0x980C # <CJK> +0xE8F2 0x9838 # <CJK> +0xE8F3 0x9824 # <CJK> +0xE8F4 0x9821 # <CJK> +0xE8F5 0x9837 # <CJK> +0xE8F6 0x983D # <CJK> +0xE8F7 0x9846 # <CJK> +0xE8F8 0x984F # <CJK> +0xE8F9 0x984B # <CJK> +0xE8FA 0x986B # <CJK> +0xE8FB 0x986F # <CJK> +0xE8FC 0x9870 # <CJK> +0xE940 0x9871 # <CJK> +0xE941 0x9874 # <CJK> +0xE942 0x9873 # <CJK> +0xE943 0x98AA # <CJK> +0xE944 0x98AF # <CJK> +0xE945 0x98B1 # <CJK> +0xE946 0x98B6 # <CJK> +0xE947 0x98C4 # <CJK> +0xE948 0x98C3 # <CJK> +0xE949 0x98C6 # <CJK> +0xE94A 0x98E9 # <CJK> +0xE94B 0x98EB # <CJK> +0xE94C 0x9903 # <CJK> +0xE94D 0x9909 # <CJK> +0xE94E 0x9912 # <CJK> +0xE94F 0x9914 # <CJK> +0xE950 0x9918 # <CJK> +0xE951 0x9921 # <CJK> +0xE952 0x991D # <CJK> +0xE953 0x991E # <CJK> +0xE954 0x9924 # <CJK> +0xE955 0x9920 # <CJK> +0xE956 0x992C # <CJK> +0xE957 0x992E # <CJK> +0xE958 0x993D # <CJK> +0xE959 0x993E # <CJK> +0xE95A 0x9942 # <CJK> +0xE95B 0x9949 # <CJK> +0xE95C 0x9945 # <CJK> +0xE95D 0x9950 # <CJK> +0xE95E 0x994B # <CJK> +0xE95F 0x9951 # <CJK> +0xE960 0x9952 # <CJK> +0xE961 0x994C # <CJK> +0xE962 0x9955 # <CJK> +0xE963 0x9997 # <CJK> +0xE964 0x9998 # <CJK> +0xE965 0x99A5 # <CJK> +0xE966 0x99AD # <CJK> +0xE967 0x99AE # <CJK> +0xE968 0x99BC # <CJK> +0xE969 0x99DF # <CJK> +0xE96A 0x99DB # <CJK> +0xE96B 0x99DD # <CJK> +0xE96C 0x99D8 # <CJK> +0xE96D 0x99D1 # <CJK> +0xE96E 0x99ED # <CJK> +0xE96F 0x99EE # <CJK> +0xE970 0x99F1 # <CJK> +0xE971 0x99F2 # <CJK> +0xE972 0x99FB # <CJK> +0xE973 0x99F8 # <CJK> +0xE974 0x9A01 # <CJK> +0xE975 0x9A0F # <CJK> +0xE976 0x9A05 # <CJK> +0xE977 0x99E2 # <CJK> +0xE978 0x9A19 # <CJK> +0xE979 0x9A2B # <CJK> +0xE97A 0x9A37 # <CJK> +0xE97B 0x9A45 # <CJK> +0xE97C 0x9A42 # <CJK> +0xE97D 0x9A40 # <CJK> +0xE97E 0x9A43 # <CJK> +0xE980 0x9A3E # <CJK> +0xE981 0x9A55 # <CJK> +0xE982 0x9A4D # <CJK> +0xE983 0x9A5B # <CJK> +0xE984 0x9A57 # <CJK> +0xE985 0x9A5F # <CJK> +0xE986 0x9A62 # <CJK> +0xE987 0x9A65 # <CJK> +0xE988 0x9A64 # <CJK> +0xE989 0x9A69 # <CJK> +0xE98A 0x9A6B # <CJK> +0xE98B 0x9A6A # <CJK> +0xE98C 0x9AAD # <CJK> +0xE98D 0x9AB0 # <CJK> +0xE98E 0x9ABC # <CJK> +0xE98F 0x9AC0 # <CJK> +0xE990 0x9ACF # <CJK> +0xE991 0x9AD1 # <CJK> +0xE992 0x9AD3 # <CJK> +0xE993 0x9AD4 # <CJK> +0xE994 0x9ADE # <CJK> +0xE995 0x9ADF # <CJK> +0xE996 0x9AE2 # <CJK> +0xE997 0x9AE3 # <CJK> +0xE998 0x9AE6 # <CJK> +0xE999 0x9AEF # <CJK> +0xE99A 0x9AEB # <CJK> +0xE99B 0x9AEE # <CJK> +0xE99C 0x9AF4 # <CJK> +0xE99D 0x9AF1 # <CJK> +0xE99E 0x9AF7 # <CJK> +0xE99F 0x9AFB # <CJK> +0xE9A0 0x9B06 # <CJK> +0xE9A1 0x9B18 # <CJK> +0xE9A2 0x9B1A # <CJK> +0xE9A3 0x9B1F # <CJK> +0xE9A4 0x9B22 # <CJK> +0xE9A5 0x9B23 # <CJK> +0xE9A6 0x9B25 # <CJK> +0xE9A7 0x9B27 # <CJK> +0xE9A8 0x9B28 # <CJK> +0xE9A9 0x9B29 # <CJK> +0xE9AA 0x9B2A # <CJK> +0xE9AB 0x9B2E # <CJK> +0xE9AC 0x9B2F # <CJK> +0xE9AD 0x9B32 # <CJK> +0xE9AE 0x9B44 # <CJK> +0xE9AF 0x9B43 # <CJK> +0xE9B0 0x9B4F # <CJK> +0xE9B1 0x9B4D # <CJK> +0xE9B2 0x9B4E # <CJK> +0xE9B3 0x9B51 # <CJK> +0xE9B4 0x9B58 # <CJK> +0xE9B5 0x9B74 # <CJK> +0xE9B6 0x9B93 # <CJK> +0xE9B7 0x9B83 # <CJK> +0xE9B8 0x9B91 # <CJK> +0xE9B9 0x9B96 # <CJK> +0xE9BA 0x9B97 # <CJK> +0xE9BB 0x9B9F # <CJK> +0xE9BC 0x9BA0 # <CJK> +0xE9BD 0x9BA8 # <CJK> +0xE9BE 0x9BB4 # <CJK> +0xE9BF 0x9BC0 # <CJK> +0xE9C0 0x9BCA # <CJK> +0xE9C1 0x9BB9 # <CJK> +0xE9C2 0x9BC6 # <CJK> +0xE9C3 0x9BCF # <CJK> +0xE9C4 0x9BD1 # <CJK> +0xE9C5 0x9BD2 # <CJK> +0xE9C6 0x9BE3 # <CJK> +0xE9C7 0x9BE2 # <CJK> +0xE9C8 0x9BE4 # <CJK> +0xE9C9 0x9BD4 # <CJK> +0xE9CA 0x9BE1 # <CJK> +0xE9CB 0x9C3A # <CJK> +0xE9CC 0x9BF2 # <CJK> +0xE9CD 0x9BF1 # <CJK> +0xE9CE 0x9BF0 # <CJK> +0xE9CF 0x9C15 # <CJK> +0xE9D0 0x9C14 # <CJK> +0xE9D1 0x9C09 # <CJK> +0xE9D2 0x9C13 # <CJK> +0xE9D3 0x9C0C # <CJK> +0xE9D4 0x9C06 # <CJK> +0xE9D5 0x9C08 # <CJK> +0xE9D6 0x9C12 # <CJK> +0xE9D7 0x9C0A # <CJK> +0xE9D8 0x9C04 # <CJK> +0xE9D9 0x9C2E # <CJK> +0xE9DA 0x9C1B # <CJK> +0xE9DB 0x9C25 # <CJK> +0xE9DC 0x9C24 # <CJK> +0xE9DD 0x9C21 # <CJK> +0xE9DE 0x9C30 # <CJK> +0xE9DF 0x9C47 # <CJK> +0xE9E0 0x9C32 # <CJK> +0xE9E1 0x9C46 # <CJK> +0xE9E2 0x9C3E # <CJK> +0xE9E3 0x9C5A # <CJK> +0xE9E4 0x9C60 # <CJK> +0xE9E5 0x9C67 # <CJK> +0xE9E6 0x9C76 # <CJK> +0xE9E7 0x9C78 # <CJK> +0xE9E8 0x9CE7 # <CJK> +0xE9E9 0x9CEC # <CJK> +0xE9EA 0x9CF0 # <CJK> +0xE9EB 0x9D09 # <CJK> +0xE9EC 0x9D08 # <CJK> +0xE9ED 0x9CEB # <CJK> +0xE9EE 0x9D03 # <CJK> +0xE9EF 0x9D06 # <CJK> +0xE9F0 0x9D2A # <CJK> +0xE9F1 0x9D26 # <CJK> +0xE9F2 0x9DAF # <CJK> +0xE9F3 0x9D23 # <CJK> +0xE9F4 0x9D1F # <CJK> +0xE9F5 0x9D44 # <CJK> +0xE9F6 0x9D15 # <CJK> +0xE9F7 0x9D12 # <CJK> +0xE9F8 0x9D41 # <CJK> +0xE9F9 0x9D3F # <CJK> +0xE9FA 0x9D3E # <CJK> +0xE9FB 0x9D46 # <CJK> +0xE9FC 0x9D48 # <CJK> +0xEA40 0x9D5D # <CJK> +0xEA41 0x9D5E # <CJK> +0xEA42 0x9D64 # <CJK> +0xEA43 0x9D51 # <CJK> +0xEA44 0x9D50 # <CJK> +0xEA45 0x9D59 # <CJK> +0xEA46 0x9D72 # <CJK> +0xEA47 0x9D89 # <CJK> +0xEA48 0x9D87 # <CJK> +0xEA49 0x9DAB # <CJK> +0xEA4A 0x9D6F # <CJK> +0xEA4B 0x9D7A # <CJK> +0xEA4C 0x9D9A # <CJK> +0xEA4D 0x9DA4 # <CJK> +0xEA4E 0x9DA9 # <CJK> +0xEA4F 0x9DB2 # <CJK> +0xEA50 0x9DC4 # <CJK> +0xEA51 0x9DC1 # <CJK> +0xEA52 0x9DBB # <CJK> +0xEA53 0x9DB8 # <CJK> +0xEA54 0x9DBA # <CJK> +0xEA55 0x9DC6 # <CJK> +0xEA56 0x9DCF # <CJK> +0xEA57 0x9DC2 # <CJK> +0xEA58 0x9DD9 # <CJK> +0xEA59 0x9DD3 # <CJK> +0xEA5A 0x9DF8 # <CJK> +0xEA5B 0x9DE6 # <CJK> +0xEA5C 0x9DED # <CJK> +0xEA5D 0x9DEF # <CJK> +0xEA5E 0x9DFD # <CJK> +0xEA5F 0x9E1A # <CJK> +0xEA60 0x9E1B # <CJK> +0xEA61 0x9E1E # <CJK> +0xEA62 0x9E75 # <CJK> +0xEA63 0x9E79 # <CJK> +0xEA64 0x9E7D # <CJK> +0xEA65 0x9E81 # <CJK> +0xEA66 0x9E88 # <CJK> +0xEA67 0x9E8B # <CJK> +0xEA68 0x9E8C # <CJK> +0xEA69 0x9E92 # <CJK> +0xEA6A 0x9E95 # <CJK> +0xEA6B 0x9E91 # <CJK> +0xEA6C 0x9E9D # <CJK> +0xEA6D 0x9EA5 # <CJK> +0xEA6E 0x9EA9 # <CJK> +0xEA6F 0x9EB8 # <CJK> +0xEA70 0x9EAA # <CJK> +0xEA71 0x9EAD # <CJK> +0xEA72 0x9761 # <CJK> +0xEA73 0x9ECC # <CJK> +0xEA74 0x9ECE # <CJK> +0xEA75 0x9ECF # <CJK> +0xEA76 0x9ED0 # <CJK> +0xEA77 0x9ED4 # <CJK> +0xEA78 0x9EDC # <CJK> +0xEA79 0x9EDE # <CJK> +0xEA7A 0x9EDD # <CJK> +0xEA7B 0x9EE0 # <CJK> +0xEA7C 0x9EE5 # <CJK> +0xEA7D 0x9EE8 # <CJK> +0xEA7E 0x9EEF # <CJK> +0xEA80 0x9EF4 # <CJK> +0xEA81 0x9EF6 # <CJK> +0xEA82 0x9EF7 # <CJK> +0xEA83 0x9EF9 # <CJK> +0xEA84 0x9EFB # <CJK> +0xEA85 0x9EFC # <CJK> +0xEA86 0x9EFD # <CJK> +0xEA87 0x9F07 # <CJK> +0xEA88 0x9F08 # <CJK> +0xEA89 0x76B7 # <CJK> +0xEA8A 0x9F15 # <CJK> +0xEA8B 0x9F21 # <CJK> +0xEA8C 0x9F2C # <CJK> +0xEA8D 0x9F3E # <CJK> +0xEA8E 0x9F4A # <CJK> +0xEA8F 0x9F52 # <CJK> +0xEA90 0x9F54 # <CJK> +0xEA91 0x9F63 # <CJK> +0xEA92 0x9F5F # <CJK> +0xEA93 0x9F60 # <CJK> +0xEA94 0x9F61 # <CJK> +0xEA95 0x9F66 # <CJK> +0xEA96 0x9F67 # <CJK> +0xEA97 0x9F6C # <CJK> +0xEA98 0x9F6A # <CJK> +0xEA99 0x9F77 # <CJK> +0xEA9A 0x9F72 # <CJK> +0xEA9B 0x9F76 # <CJK> +0xEA9C 0x9F95 # <CJK> +0xEA9D 0x9F9C # <CJK> +0xEA9E 0x9FA0 # <CJK> +0xEA9F 0x582F # <CJK> +0xEAA0 0x69C7 # <CJK> +0xEAA1 0x9059 # <CJK> +0xEAA2 0x7464 # <CJK> +0xEAA3 0x51DC # <CJK> +0xEAA4 0x7199 # <CJK> diff --git a/ext/mbstring/tests/data/SJIS-2004.txt b/ext/mbstring/tests/data/SJIS-2004.txt new file mode 100644 index 0000000000..2db475d088 --- /dev/null +++ b/ext/mbstring/tests/data/SJIS-2004.txt @@ -0,0 +1,11549 @@ +## Shift_JIS-2004 (JIS X 0213:2004 Appendix 1) vs Unicode mapping table +## +## Date: 3 May 2009 +## License: +## Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved. +## Copyright (C) 2001 I'O, All Rights Reserved. +## Copyright (C) 2006, 2009 Project X0213, All Rights Reserved. +## You can use, modify, distribute this table freely. +## Note: +## [1983] JIS codepoint defined by JIS X 0208-1983 +## [1990] JIS codepoint defined by JIS X 0208-1990 +## [2000] JIS codepoint defined by JIS X 0213:2000 +## [2004] JIS codepoint defined by JIS X 0213:2004 +## [Unicode3.1] UCS codepoint defined by Unicode 3.1 +## [Unicode3.2] UCS codepoint defined by Unicode 3.2 +## Fullwidth UCS fullwidth form (U+Fxxx) +## Windows Windows (CP932) mapping +## Some 0213 character can't represent by one UCS character. +## In this table, such characters are described as 'U+xxxx+xxxx'. +## +## JIS Unicode Name Note +0x00 U+0000 # <control> +0x01 U+0001 # <control> +0x02 U+0002 # <control> +0x03 U+0003 # <control> +0x04 U+0004 # <control> +0x05 U+0005 # <control> +0x06 U+0006 # <control> +0x07 U+0007 # <control> +0x08 U+0008 # <control> +0x09 U+0009 # <control> +0x0A U+000A # <control> +0x0B U+000B # <control> +0x0C U+000C # <control> +0x0D U+000D # <control> +0x0E U+000E # <control> +0x0F U+000F # <control> +0x10 U+0010 # <control> +0x11 U+0011 # <control> +0x12 U+0012 # <control> +0x13 U+0013 # <control> +0x14 U+0014 # <control> +0x15 U+0015 # <control> +0x16 U+0016 # <control> +0x17 U+0017 # <control> +0x18 U+0018 # <control> +0x19 U+0019 # <control> +0x1A U+001A # <control> +0x1B U+001B # <control> +0x1C U+001C # <control> +0x1D U+001D # <control> +0x1E U+001E # <control> +0x1F U+001F # <control> +0x20 U+0020 # SPACE +0x21 U+0021 # EXCLAMATION MARK +0x22 U+0022 # QUOTATION MARK +0x23 U+0023 # NUMBER SIGN +0x24 U+0024 # DOLLAR SIGN +0x25 U+0025 # PERCENT SIGN +0x26 U+0026 # AMPERSAND +0x27 U+0027 # APOSTROPHE +0x28 U+0028 # LEFT PARENTHESIS +0x29 U+0029 # RIGHT PARENTHESIS +0x2A U+002A # ASTERISK +0x2B U+002B # PLUS SIGN +0x2C U+002C # COMMA +0x2D U+002D # HYPHEN-MINUS +0x2E U+002E # FULL STOP +0x2F U+002F # SOLIDUS +0x30 U+0030 # DIGIT ZERO +0x31 U+0031 # DIGIT ONE +0x32 U+0032 # DIGIT TWO +0x33 U+0033 # DIGIT THREE +0x34 U+0034 # DIGIT FOUR +0x35 U+0035 # DIGIT FIVE +0x36 U+0036 # DIGIT SIX +0x37 U+0037 # DIGIT SEVEN +0x38 U+0038 # DIGIT EIGHT +0x39 U+0039 # DIGIT NINE +0x3A U+003A # COLON +0x3B U+003B # SEMICOLON +0x3C U+003C # LESS-THAN SIGN +0x3D U+003D # EQUALS SIGN +0x3E U+003E # GREATER-THAN SIGN +0x3F U+003F # QUESTION MARK +0x40 U+0040 # COMMERCIAL AT +0x41 U+0041 # LATIN CAPITAL LETTER A +0x42 U+0042 # LATIN CAPITAL LETTER B +0x43 U+0043 # LATIN CAPITAL LETTER C +0x44 U+0044 # LATIN CAPITAL LETTER D +0x45 U+0045 # LATIN CAPITAL LETTER E +0x46 U+0046 # LATIN CAPITAL LETTER F +0x47 U+0047 # LATIN CAPITAL LETTER G +0x48 U+0048 # LATIN CAPITAL LETTER H +0x49 U+0049 # LATIN CAPITAL LETTER I +0x4A U+004A # LATIN CAPITAL LETTER J +0x4B U+004B # LATIN CAPITAL LETTER K +0x4C U+004C # LATIN CAPITAL LETTER L +0x4D U+004D # LATIN CAPITAL LETTER M +0x4E U+004E # LATIN CAPITAL LETTER N +0x4F U+004F # LATIN CAPITAL LETTER O +0x50 U+0050 # LATIN CAPITAL LETTER P +0x51 U+0051 # LATIN CAPITAL LETTER Q +0x52 U+0052 # LATIN CAPITAL LETTER R +0x53 U+0053 # LATIN CAPITAL LETTER S +0x54 U+0054 # LATIN CAPITAL LETTER T +0x55 U+0055 # LATIN CAPITAL LETTER U +0x56 U+0056 # LATIN CAPITAL LETTER V +0x57 U+0057 # LATIN CAPITAL LETTER W +0x58 U+0058 # LATIN CAPITAL LETTER X +0x59 U+0059 # LATIN CAPITAL LETTER Y +0x5A U+005A # LATIN CAPITAL LETTER Z +0x5B U+005B # LEFT SQUARE BRACKET +0x5C U+00A5 # YEN SIGN +0x5D U+005D # RIGHT SQUARE BRACKET +0x5E U+005E # CIRCUMFLEX ACCENT +0x5F U+005F # LOW LINE +0x60 U+0060 # GRAVE ACCENT +0x61 U+0061 # LATIN SMALL LETTER A +0x62 U+0062 # LATIN SMALL LETTER B +0x63 U+0063 # LATIN SMALL LETTER C +0x64 U+0064 # LATIN SMALL LETTER D +0x65 U+0065 # LATIN SMALL LETTER E +0x66 U+0066 # LATIN SMALL LETTER F +0x67 U+0067 # LATIN SMALL LETTER G +0x68 U+0068 # LATIN SMALL LETTER H +0x69 U+0069 # LATIN SMALL LETTER I +0x6A U+006A # LATIN SMALL LETTER J +0x6B U+006B # LATIN SMALL LETTER K +0x6C U+006C # LATIN SMALL LETTER L +0x6D U+006D # LATIN SMALL LETTER M +0x6E U+006E # LATIN SMALL LETTER N +0x6F U+006F # LATIN SMALL LETTER O +0x70 U+0070 # LATIN SMALL LETTER P +0x71 U+0071 # LATIN SMALL LETTER Q +0x72 U+0072 # LATIN SMALL LETTER R +0x73 U+0073 # LATIN SMALL LETTER S +0x74 U+0074 # LATIN SMALL LETTER T +0x75 U+0075 # LATIN SMALL LETTER U +0x76 U+0076 # LATIN SMALL LETTER V +0x77 U+0077 # LATIN SMALL LETTER W +0x78 U+0078 # LATIN SMALL LETTER X +0x79 U+0079 # LATIN SMALL LETTER Y +0x7A U+007A # LATIN SMALL LETTER Z +0x7B U+007B # LEFT CURLY BRACKET +0x7C U+007C # VERTICAL LINE +0x7D U+007D # RIGHT CURLY BRACKET +0x7E U+203E # OVERLINE +0x7F U+007F # <control> +0x80 # <reserved> +0x81 # <doublebytes> +0x82 # <doublebytes> +0x83 # <doublebytes> +0x84 # <doublebytes> +0x85 # <doublebytes> +0x86 # <doublebytes> +0x87 # <doublebytes> +0x88 # <doublebytes> +0x89 # <doublebytes> +0x8A # <doublebytes> +0x8B # <doublebytes> +0x8C # <doublebytes> +0x8D # <doublebytes> +0x8E # <doublebytes> +0x8F # <doublebytes> +0x90 # <doublebytes> +0x91 # <doublebytes> +0x92 # <doublebytes> +0x93 # <doublebytes> +0x94 # <doublebytes> +0x95 # <doublebytes> +0x96 # <doublebytes> +0x97 # <doublebytes> +0x98 # <doublebytes> +0x99 # <doublebytes> +0x9A # <doublebytes> +0x9B # <doublebytes> +0x9C # <doublebytes> +0x9D # <doublebytes> +0x9E # <doublebytes> +0x9F # <doublebytes> +0xA0 # <reserved> +0xA1 U+FF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 U+FF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 U+FF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 U+FF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 U+FF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 U+FF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 U+FF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 U+FF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 U+FF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA U+FF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB U+FF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC U+FF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD U+FF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE U+FF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF U+FF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 U+FF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 U+FF71 # HALFWIDTH KATAKANA LETTER A +0xB2 U+FF72 # HALFWIDTH KATAKANA LETTER I +0xB3 U+FF73 # HALFWIDTH KATAKANA LETTER U +0xB4 U+FF74 # HALFWIDTH KATAKANA LETTER E +0xB5 U+FF75 # HALFWIDTH KATAKANA LETTER O +0xB6 U+FF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 U+FF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 U+FF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 U+FF79 # HALFWIDTH KATAKANA LETTER KE +0xBA U+FF7A # HALFWIDTH KATAKANA LETTER KO +0xBB U+FF7B # HALFWIDTH KATAKANA LETTER SA +0xBC U+FF7C # HALFWIDTH KATAKANA LETTER SI +0xBD U+FF7D # HALFWIDTH KATAKANA LETTER SU +0xBE U+FF7E # HALFWIDTH KATAKANA LETTER SE +0xBF U+FF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 U+FF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 U+FF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 U+FF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 U+FF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 U+FF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 U+FF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 U+FF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 U+FF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 U+FF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 U+FF89 # HALFWIDTH KATAKANA LETTER NO +0xCA U+FF8A # HALFWIDTH KATAKANA LETTER HA +0xCB U+FF8B # HALFWIDTH KATAKANA LETTER HI +0xCC U+FF8C # HALFWIDTH KATAKANA LETTER HU +0xCD U+FF8D # HALFWIDTH KATAKANA LETTER HE +0xCE U+FF8E # HALFWIDTH KATAKANA LETTER HO +0xCF U+FF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 U+FF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 U+FF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 U+FF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 U+FF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 U+FF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 U+FF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 U+FF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 U+FF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 U+FF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 U+FF99 # HALFWIDTH KATAKANA LETTER RU +0xDA U+FF9A # HALFWIDTH KATAKANA LETTER RE +0xDB U+FF9B # HALFWIDTH KATAKANA LETTER RO +0xDC U+FF9C # HALFWIDTH KATAKANA LETTER WA +0xDD U+FF9D # HALFWIDTH KATAKANA LETTER N +0xDE U+FF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF U+FF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +0xE0 # <doublebytes> +0xE1 # <doublebytes> +0xE2 # <doublebytes> +0xE3 # <doublebytes> +0xE4 # <doublebytes> +0xE5 # <doublebytes> +0xE6 # <doublebytes> +0xE7 # <doublebytes> +0xE8 # <doublebytes> +0xE9 # <doublebytes> +0xEA # <doublebytes> +0xEB # <doublebytes> +0xEC # <doublebytes> +0xED # <doublebytes> +0xEE # <doublebytes> +0xEF # <doublebytes> +0xF0 # <doublebytes> +0xF1 # <doublebytes> +0xF2 # <doublebytes> +0xF3 # <doublebytes> +0xF4 # <doublebytes> +0xF5 # <doublebytes> +0xF6 # <doublebytes> +0xF7 # <doublebytes> +0xF8 # <doublebytes> +0xF9 # <doublebytes> +0xFA # <doublebytes> +0xFB # <doublebytes> +0xFC # <doublebytes> +0xFD # <reserved> +0xFE # <reserved> +0xFF # <reserved> +0x8140 U+3000 # IDEOGRAPHIC SPACE +0x8141 U+3001 # IDEOGRAPHIC COMMA +0x8142 U+3002 # IDEOGRAPHIC FULL STOP +0x8143 U+FF0C # FULLWIDTH COMMA +0x8144 U+FF0E # FULLWIDTH FULL STOP +0x8145 U+30FB # KATAKANA MIDDLE DOT +0x8146 U+FF1A # FULLWIDTH COLON +0x8147 U+FF1B # FULLWIDTH SEMICOLON +0x8148 U+FF1F # FULLWIDTH QUESTION MARK +0x8149 U+FF01 # FULLWIDTH EXCLAMATION MARK +0x814A U+309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x814B U+309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x814C U+00B4 # ACUTE ACCENT +0x814D U+FF40 # FULLWIDTH GRAVE ACCENT +0x814E U+00A8 # DIAERESIS +0x814F U+FF3E # FULLWIDTH CIRCUMFLEX ACCENT +0x8150 U+FFE3 # FULLWIDTH MACRON +0x8151 U+FF3F # FULLWIDTH LOW LINE +0x8152 U+30FD # KATAKANA ITERATION MARK +0x8153 U+30FE # KATAKANA VOICED ITERATION MARK +0x8154 U+309D # HIRAGANA ITERATION MARK +0x8155 U+309E # HIRAGANA VOICED ITERATION MARK +0x8156 U+3003 # DITTO MARK +0x8157 U+4EDD # <cjk> +0x8158 U+3005 # IDEOGRAPHIC ITERATION MARK +0x8159 U+3006 # IDEOGRAPHIC CLOSING MARK +0x815A U+3007 # IDEOGRAPHIC NUMBER ZERO +0x815B U+30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x815C U+2014 # EM DASH Windows: U+2015 +0x815D U+2010 # HYPHEN +0x815E U+FF0F # FULLWIDTH SOLIDUS +0x815F U+005C # REVERSE SOLIDUS Fullwidth: U+FF3C +0x8160 U+301C # WAVE DASH Windows: U+FF5E +0x8161 U+2016 # DOUBLE VERTICAL LINE Windows: U+2225 +0x8162 U+FF5C # FULLWIDTH VERTICAL LINE +0x8163 U+2026 # HORIZONTAL ELLIPSIS +0x8164 U+2025 # TWO DOT LEADER +0x8165 U+2018 # LEFT SINGLE QUOTATION MARK +0x8166 U+2019 # RIGHT SINGLE QUOTATION MARK +0x8167 U+201C # LEFT DOUBLE QUOTATION MARK +0x8168 U+201D # RIGHT DOUBLE QUOTATION MARK +0x8169 U+FF08 # FULLWIDTH LEFT PARENTHESIS +0x816A U+FF09 # FULLWIDTH RIGHT PARENTHESIS +0x816B U+3014 # LEFT TORTOISE SHELL BRACKET +0x816C U+3015 # RIGHT TORTOISE SHELL BRACKET +0x816D U+FF3B # FULLWIDTH LEFT SQUARE BRACKET +0x816E U+FF3D # FULLWIDTH RIGHT SQUARE BRACKET +0x816F U+FF5B # FULLWIDTH LEFT CURLY BRACKET +0x8170 U+FF5D # FULLWIDTH RIGHT CURLY BRACKET +0x8171 U+3008 # LEFT ANGLE BRACKET +0x8172 U+3009 # RIGHT ANGLE BRACKET +0x8173 U+300A # LEFT DOUBLE ANGLE BRACKET +0x8174 U+300B # RIGHT DOUBLE ANGLE BRACKET +0x8175 U+300C # LEFT CORNER BRACKET +0x8176 U+300D # RIGHT CORNER BRACKET +0x8177 U+300E # LEFT WHITE CORNER BRACKET +0x8178 U+300F # RIGHT WHITE CORNER BRACKET +0x8179 U+3010 # LEFT BLACK LENTICULAR BRACKET +0x817A U+3011 # RIGHT BLACK LENTICULAR BRACKET +0x817B U+FF0B # FULLWIDTH PLUS SIGN +0x817C U+2212 # MINUS SIGN Windows: U+FF0D +0x817D U+00B1 # PLUS-MINUS SIGN +0x817E U+00D7 # MULTIPLICATION SIGN +0x8180 U+00F7 # DIVISION SIGN +0x8181 U+FF1D # FULLWIDTH EQUALS SIGN +0x8182 U+2260 # NOT EQUAL TO +0x8183 U+FF1C # FULLWIDTH LESS-THAN SIGN +0x8184 U+FF1E # FULLWIDTH GREATER-THAN SIGN +0x8185 U+2266 # LESS-THAN OVER EQUAL TO +0x8186 U+2267 # GREATER-THAN OVER EQUAL TO +0x8187 U+221E # INFINITY +0x8188 U+2234 # THEREFORE +0x8189 U+2642 # MALE SIGN +0x818A U+2640 # FEMALE SIGN +0x818B U+00B0 # DEGREE SIGN +0x818C U+2032 # PRIME +0x818D U+2033 # DOUBLE PRIME +0x818E U+2103 # DEGREE CELSIUS +0x818F U+FFE5 # FULLWIDTH YEN SIGN +0x8190 U+FF04 # FULLWIDTH DOLLAR SIGN +0x8191 U+00A2 # CENT SIGN Windows: U+FFE0 +0x8192 U+00A3 # POUND SIGN Windows: U+FFE1 +0x8193 U+FF05 # FULLWIDTH PERCENT SIGN +0x8194 U+FF03 # FULLWIDTH NUMBER SIGN +0x8195 U+FF06 # FULLWIDTH AMPERSAND +0x8196 U+FF0A # FULLWIDTH ASTERISK +0x8197 U+FF20 # FULLWIDTH COMMERCIAL AT +0x8198 U+00A7 # SECTION SIGN +0x8199 U+2606 # WHITE STAR +0x819A U+2605 # BLACK STAR +0x819B U+25CB # WHITE CIRCLE +0x819C U+25CF # BLACK CIRCLE +0x819D U+25CE # BULLSEYE +0x819E U+25C7 # WHITE DIAMOND +0x819F U+25C6 # BLACK DIAMOND +0x81A0 U+25A1 # WHITE SQUARE +0x81A1 U+25A0 # BLACK SQUARE +0x81A2 U+25B3 # WHITE UP-POINTING TRIANGLE +0x81A3 U+25B2 # BLACK UP-POINTING TRIANGLE +0x81A4 U+25BD # WHITE DOWN-POINTING TRIANGLE +0x81A5 U+25BC # BLACK DOWN-POINTING TRIANGLE +0x81A6 U+203B # REFERENCE MARK +0x81A7 U+3012 # POSTAL MARK +0x81A8 U+2192 # RIGHTWARDS ARROW +0x81A9 U+2190 # LEFTWARDS ARROW +0x81AA U+2191 # UPWARDS ARROW +0x81AB U+2193 # DOWNWARDS ARROW +0x81AC U+3013 # GETA MARK +0x81AD U+FF07 # FULLWIDTH APOSTROPHE [2000] +0x81AE U+FF02 # FULLWIDTH QUOTATION MARK [2000] +0x81AF U+FF0D # FULLWIDTH HYPHEN-MINUS [2000] +0x81B0 U+007E # TILDE [2000] Fullwidth: U+FF5E +0x81B1 U+3033 # VERTICAL KANA REPEAT MARK UPPER HALF [2000] +0x81B2 U+3034 # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF [2000] +0x81B3 U+3035 # VERTICAL KANA REPEAT MARK LOWER HALF [2000] +0x81B4 U+303B # VERTICAL IDEOGRAPHIC ITERATION MARK [2000] [Unicode3.2] +0x81B5 U+303C # MASU MARK [2000] [Unicode3.2] +0x81B6 U+30FF # KATAKANA DIGRAPH KOTO [2000] [Unicode3.2] +0x81B7 U+309F # HIRAGANA DIGRAPH YORI [2000] [Unicode3.2] +0x81B8 U+2208 # ELEMENT OF [1983] +0x81B9 U+220B # CONTAINS AS MEMBER [1983] +0x81BA U+2286 # SUBSET OF OR EQUAL TO [1983] +0x81BB U+2287 # SUPERSET OF OR EQUAL TO [1983] +0x81BC U+2282 # SUBSET OF [1983] +0x81BD U+2283 # SUPERSET OF [1983] +0x81BE U+222A # UNION [1983] +0x81BF U+2229 # INTERSECTION [1983] +0x81C0 U+2284 # NOT A SUBSET OF [2000] +0x81C1 U+2285 # NOT A SUPERSET OF [2000] +0x81C2 U+228A # SUBSET OF WITH NOT EQUAL TO [2000] +0x81C3 U+228B # SUPERSET OF WITH NOT EQUAL TO [2000] +0x81C4 U+2209 # NOT AN ELEMENT OF [2000] +0x81C5 U+2205 # EMPTY SET [2000] +0x81C6 U+2305 # PROJECTIVE [2000] +0x81C7 U+2306 # PERSPECTIVE [2000] +0x81C8 U+2227 # LOGICAL AND [1983] +0x81C9 U+2228 # LOGICAL OR [1983] +0x81CA U+00AC # NOT SIGN [1983] Windows: U+FFE2 +0x81CB U+21D2 # RIGHTWARDS DOUBLE ARROW [1983] +0x81CC U+21D4 # LEFT RIGHT DOUBLE ARROW [1983] +0x81CD U+2200 # FOR ALL [1983] +0x81CE U+2203 # THERE EXISTS [1983] +0x81CF U+2295 # CIRCLED PLUS [2000] +0x81D0 U+2296 # CIRCLED MINUS [2000] +0x81D1 U+2297 # CIRCLED TIMES [2000] +0x81D2 U+2225 # PARALLEL TO [2000] +0x81D3 U+2226 # NOT PARALLEL TO [2000] +0x81D4 U+FF5F # FULLWIDTH LEFT WHITE PARENTHESIS [2000] [Unicode3.2] +0x81D5 U+FF60 # FULLWIDTH RIGHT WHITE PARENTHESIS [2000] [Unicode3.2] +0x81D6 U+3018 # LEFT WHITE TORTOISE SHELL BRACKET [2000] +0x81D7 U+3019 # RIGHT WHITE TORTOISE SHELL BRACKET [2000] +0x81D8 U+3016 # LEFT WHITE LENTICULAR BRACKET [2000] +0x81D9 U+3017 # RIGHT WHITE LENTICULAR BRACKET [2000] +0x81DA U+2220 # ANGLE [1983] +0x81DB U+22A5 # UP TACK [1983] +0x81DC U+2312 # ARC [1983] +0x81DD U+2202 # PARTIAL DIFFERENTIAL [1983] +0x81DE U+2207 # NABLA [1983] +0x81DF U+2261 # IDENTICAL TO [1983] +0x81E0 U+2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF [1983] +0x81E1 U+226A # MUCH LESS-THAN [1983] +0x81E2 U+226B # MUCH GREATER-THAN [1983] +0x81E3 U+221A # SQUARE ROOT [1983] +0x81E4 U+223D # REVERSED TILDE [1983] +0x81E5 U+221D # PROPORTIONAL TO [1983] +0x81E6 U+2235 # BECAUSE [1983] +0x81E7 U+222B # INTEGRAL [1983] +0x81E8 U+222C # DOUBLE INTEGRAL [1983] +0x81E9 U+2262 # NOT IDENTICAL TO [2000] +0x81EA U+2243 # ASYMPTOTICALLY EQUAL TO [2000] +0x81EB U+2245 # APPROXIMATELY EQUAL TO [2000] +0x81EC U+2248 # ALMOST EQUAL TO [2000] +0x81ED U+2276 # LESS-THAN OR GREATER-THAN [2000] +0x81EE U+2277 # GREATER-THAN OR LESS-THAN [2000] +0x81EF U+2194 # LEFT RIGHT ARROW [2000] +0x81F0 U+212B # ANGSTROM SIGN [1983] +0x81F1 U+2030 # PER MILLE SIGN [1983] +0x81F2 U+266F # MUSIC SHARP SIGN [1983] +0x81F3 U+266D # MUSIC FLAT SIGN [1983] +0x81F4 U+266A # EIGHTH NOTE [1983] +0x81F5 U+2020 # DAGGER [1983] +0x81F6 U+2021 # DOUBLE DAGGER [1983] +0x81F7 U+00B6 # PILCROW SIGN [1983] +0x81F8 U+266E # MUSIC NATURAL SIGN [2000] +0x81F9 U+266B # BEAMED EIGHTH NOTES [2000] +0x81FA U+266C # BEAMED SIXTEENTH NOTES [2000] +0x81FB U+2669 # QUARTER NOTE [2000] +0x81FC U+25EF # LARGE CIRCLE [1983] +0x8240 U+25B7 # WHITE RIGHT-POINTING TRIANGLE [2000] +0x8241 U+25B6 # BLACK RIGHT-POINTING TRIANGLE [2000] +0x8242 U+25C1 # WHITE LEFT-POINTING TRIANGLE [2000] +0x8243 U+25C0 # BLACK LEFT-POINTING TRIANGLE [2000] +0x8244 U+2197 # NORTH EAST ARROW [2000] +0x8245 U+2198 # SOUTH EAST ARROW [2000] +0x8246 U+2196 # NORTH WEST ARROW [2000] +0x8247 U+2199 # SOUTH WEST ARROW [2000] +0x8248 U+21C4 # RIGHTWARDS ARROW OVER LEFTWARDS ARROW [2000] +0x8249 U+21E8 # RIGHTWARDS WHITE ARROW [2000] +0x824A U+21E6 # LEFTWARDS WHITE ARROW [2000] +0x824B U+21E7 # UPWARDS WHITE ARROW [2000] +0x824C U+21E9 # DOWNWARDS WHITE ARROW [2000] +0x824D U+2934 # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS [2000] [Unicode3.2] +0x824E U+2935 # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS [2000] [Unicode3.2] +0x824F U+FF10 # FULLWIDTH DIGIT ZERO +0x8250 U+FF11 # FULLWIDTH DIGIT ONE +0x8251 U+FF12 # FULLWIDTH DIGIT TWO +0x8252 U+FF13 # FULLWIDTH DIGIT THREE +0x8253 U+FF14 # FULLWIDTH DIGIT FOUR +0x8254 U+FF15 # FULLWIDTH DIGIT FIVE +0x8255 U+FF16 # FULLWIDTH DIGIT SIX +0x8256 U+FF17 # FULLWIDTH DIGIT SEVEN +0x8257 U+FF18 # FULLWIDTH DIGIT EIGHT +0x8258 U+FF19 # FULLWIDTH DIGIT NINE +0x8259 U+29BF # CIRCLED BULLET [2000] [Unicode3.2] +0x825A U+25C9 # FISHEYE [2000] +0x825B U+303D # PART ALTERNATION MARK [2000] [Unicode3.2] +0x825C U+FE46 # WHITE SESAME DOT [2000] [Unicode3.2] +0x825D U+FE45 # SESAME DOT [2000] [Unicode3.2] +0x825E U+25E6 # WHITE BULLET [2000] +0x825F U+2022 # BULLET [2000] +0x8260 U+FF21 # FULLWIDTH LATIN CAPITAL LETTER A +0x8261 U+FF22 # FULLWIDTH LATIN CAPITAL LETTER B +0x8262 U+FF23 # FULLWIDTH LATIN CAPITAL LETTER C +0x8263 U+FF24 # FULLWIDTH LATIN CAPITAL LETTER D +0x8264 U+FF25 # FULLWIDTH LATIN CAPITAL LETTER E +0x8265 U+FF26 # FULLWIDTH LATIN CAPITAL LETTER F +0x8266 U+FF27 # FULLWIDTH LATIN CAPITAL LETTER G +0x8267 U+FF28 # FULLWIDTH LATIN CAPITAL LETTER H +0x8268 U+FF29 # FULLWIDTH LATIN CAPITAL LETTER I +0x8269 U+FF2A # FULLWIDTH LATIN CAPITAL LETTER J +0x826A U+FF2B # FULLWIDTH LATIN CAPITAL LETTER K +0x826B U+FF2C # FULLWIDTH LATIN CAPITAL LETTER L +0x826C U+FF2D # FULLWIDTH LATIN CAPITAL LETTER M +0x826D U+FF2E # FULLWIDTH LATIN CAPITAL LETTER N +0x826E U+FF2F # FULLWIDTH LATIN CAPITAL LETTER O +0x826F U+FF30 # FULLWIDTH LATIN CAPITAL LETTER P +0x8270 U+FF31 # FULLWIDTH LATIN CAPITAL LETTER Q +0x8271 U+FF32 # FULLWIDTH LATIN CAPITAL LETTER R +0x8272 U+FF33 # FULLWIDTH LATIN CAPITAL LETTER S +0x8273 U+FF34 # FULLWIDTH LATIN CAPITAL LETTER T +0x8274 U+FF35 # FULLWIDTH LATIN CAPITAL LETTER U +0x8275 U+FF36 # FULLWIDTH LATIN CAPITAL LETTER V +0x8276 U+FF37 # FULLWIDTH LATIN CAPITAL LETTER W +0x8277 U+FF38 # FULLWIDTH LATIN CAPITAL LETTER X +0x8278 U+FF39 # FULLWIDTH LATIN CAPITAL LETTER Y +0x8279 U+FF3A # FULLWIDTH LATIN CAPITAL LETTER Z +0x827A U+2213 # MINUS-OR-PLUS SIGN [2000] +0x827B U+2135 # ALEF SYMBOL [2000] +0x827C U+210F # PLANCK CONSTANT OVER TWO PI [2000] +0x827D U+33CB # SQUARE HP [2000] +0x827E U+2113 # SCRIPT SMALL L [2000] +0x8280 U+2127 # INVERTED OHM SIGN [2000] +0x8281 U+FF41 # FULLWIDTH LATIN SMALL LETTER A +0x8282 U+FF42 # FULLWIDTH LATIN SMALL LETTER B +0x8283 U+FF43 # FULLWIDTH LATIN SMALL LETTER C +0x8284 U+FF44 # FULLWIDTH LATIN SMALL LETTER D +0x8285 U+FF45 # FULLWIDTH LATIN SMALL LETTER E +0x8286 U+FF46 # FULLWIDTH LATIN SMALL LETTER F +0x8287 U+FF47 # FULLWIDTH LATIN SMALL LETTER G +0x8288 U+FF48 # FULLWIDTH LATIN SMALL LETTER H +0x8289 U+FF49 # FULLWIDTH LATIN SMALL LETTER I +0x828A U+FF4A # FULLWIDTH LATIN SMALL LETTER J +0x828B U+FF4B # FULLWIDTH LATIN SMALL LETTER K +0x828C U+FF4C # FULLWIDTH LATIN SMALL LETTER L +0x828D U+FF4D # FULLWIDTH LATIN SMALL LETTER M +0x828E U+FF4E # FULLWIDTH LATIN SMALL LETTER N +0x828F U+FF4F # FULLWIDTH LATIN SMALL LETTER O +0x8290 U+FF50 # FULLWIDTH LATIN SMALL LETTER P +0x8291 U+FF51 # FULLWIDTH LATIN SMALL LETTER Q +0x8292 U+FF52 # FULLWIDTH LATIN SMALL LETTER R +0x8293 U+FF53 # FULLWIDTH LATIN SMALL LETTER S +0x8294 U+FF54 # FULLWIDTH LATIN SMALL LETTER T +0x8295 U+FF55 # FULLWIDTH LATIN SMALL LETTER U +0x8296 U+FF56 # FULLWIDTH LATIN SMALL LETTER V +0x8297 U+FF57 # FULLWIDTH LATIN SMALL LETTER W +0x8298 U+FF58 # FULLWIDTH LATIN SMALL LETTER X +0x8299 U+FF59 # FULLWIDTH LATIN SMALL LETTER Y +0x829A U+FF5A # FULLWIDTH LATIN SMALL LETTER Z +0x829B U+30A0 # KATAKANA-HIRAGANA DOUBLE HYPHEN [2000] [Unicode3.2] +0x829C U+2013 # EN DASH [2000] +0x829D U+29FA # DOUBLE PLUS [2000] [Unicode3.2] +0x829E U+29FB # TRIPLE PLUS [2000] [Unicode3.2] +0x829F U+3041 # HIRAGANA LETTER SMALL A +0x82A0 U+3042 # HIRAGANA LETTER A +0x82A1 U+3043 # HIRAGANA LETTER SMALL I +0x82A2 U+3044 # HIRAGANA LETTER I +0x82A3 U+3045 # HIRAGANA LETTER SMALL U +0x82A4 U+3046 # HIRAGANA LETTER U +0x82A5 U+3047 # HIRAGANA LETTER SMALL E +0x82A6 U+3048 # HIRAGANA LETTER E +0x82A7 U+3049 # HIRAGANA LETTER SMALL O +0x82A8 U+304A # HIRAGANA LETTER O +0x82A9 U+304B # HIRAGANA LETTER KA +0x82AA U+304C # HIRAGANA LETTER GA +0x82AB U+304D # HIRAGANA LETTER KI +0x82AC U+304E # HIRAGANA LETTER GI +0x82AD U+304F # HIRAGANA LETTER KU +0x82AE U+3050 # HIRAGANA LETTER GU +0x82AF U+3051 # HIRAGANA LETTER KE +0x82B0 U+3052 # HIRAGANA LETTER GE +0x82B1 U+3053 # HIRAGANA LETTER KO +0x82B2 U+3054 # HIRAGANA LETTER GO +0x82B3 U+3055 # HIRAGANA LETTER SA +0x82B4 U+3056 # HIRAGANA LETTER ZA +0x82B5 U+3057 # HIRAGANA LETTER SI +0x82B6 U+3058 # HIRAGANA LETTER ZI +0x82B7 U+3059 # HIRAGANA LETTER SU +0x82B8 U+305A # HIRAGANA LETTER ZU +0x82B9 U+305B # HIRAGANA LETTER SE +0x82BA U+305C # HIRAGANA LETTER ZE +0x82BB U+305D # HIRAGANA LETTER SO +0x82BC U+305E # HIRAGANA LETTER ZO +0x82BD U+305F # HIRAGANA LETTER TA +0x82BE U+3060 # HIRAGANA LETTER DA +0x82BF U+3061 # HIRAGANA LETTER TI +0x82C0 U+3062 # HIRAGANA LETTER DI +0x82C1 U+3063 # HIRAGANA LETTER SMALL TU +0x82C2 U+3064 # HIRAGANA LETTER TU +0x82C3 U+3065 # HIRAGANA LETTER DU +0x82C4 U+3066 # HIRAGANA LETTER TE +0x82C5 U+3067 # HIRAGANA LETTER DE +0x82C6 U+3068 # HIRAGANA LETTER TO +0x82C7 U+3069 # HIRAGANA LETTER DO +0x82C8 U+306A # HIRAGANA LETTER NA +0x82C9 U+306B # HIRAGANA LETTER NI +0x82CA U+306C # HIRAGANA LETTER NU +0x82CB U+306D # HIRAGANA LETTER NE +0x82CC U+306E # HIRAGANA LETTER NO +0x82CD U+306F # HIRAGANA LETTER HA +0x82CE U+3070 # HIRAGANA LETTER BA +0x82CF U+3071 # HIRAGANA LETTER PA +0x82D0 U+3072 # HIRAGANA LETTER HI +0x82D1 U+3073 # HIRAGANA LETTER BI +0x82D2 U+3074 # HIRAGANA LETTER PI +0x82D3 U+3075 # HIRAGANA LETTER HU +0x82D4 U+3076 # HIRAGANA LETTER BU +0x82D5 U+3077 # HIRAGANA LETTER PU +0x82D6 U+3078 # HIRAGANA LETTER HE +0x82D7 U+3079 # HIRAGANA LETTER BE +0x82D8 U+307A # HIRAGANA LETTER PE +0x82D9 U+307B # HIRAGANA LETTER HO +0x82DA U+307C # HIRAGANA LETTER BO +0x82DB U+307D # HIRAGANA LETTER PO +0x82DC U+307E # HIRAGANA LETTER MA +0x82DD U+307F # HIRAGANA LETTER MI +0x82DE U+3080 # HIRAGANA LETTER MU +0x82DF U+3081 # HIRAGANA LETTER ME +0x82E0 U+3082 # HIRAGANA LETTER MO +0x82E1 U+3083 # HIRAGANA LETTER SMALL YA +0x82E2 U+3084 # HIRAGANA LETTER YA +0x82E3 U+3085 # HIRAGANA LETTER SMALL YU +0x82E4 U+3086 # HIRAGANA LETTER YU +0x82E5 U+3087 # HIRAGANA LETTER SMALL YO +0x82E6 U+3088 # HIRAGANA LETTER YO +0x82E7 U+3089 # HIRAGANA LETTER RA +0x82E8 U+308A # HIRAGANA LETTER RI +0x82E9 U+308B # HIRAGANA LETTER RU +0x82EA U+308C # HIRAGANA LETTER RE +0x82EB U+308D # HIRAGANA LETTER RO +0x82EC U+308E # HIRAGANA LETTER SMALL WA +0x82ED U+308F # HIRAGANA LETTER WA +0x82EE U+3090 # HIRAGANA LETTER WI +0x82EF U+3091 # HIRAGANA LETTER WE +0x82F0 U+3092 # HIRAGANA LETTER WO +0x82F1 U+3093 # HIRAGANA LETTER N +0x82F2 U+3094 # HIRAGANA LETTER VU [2000] +0x82F3 U+3095 # HIRAGANA LETTER SMALL KA [2000] [Unicode3.2] +0x82F4 U+3096 # HIRAGANA LETTER SMALL KE [2000] [Unicode3.2] +0x82F5 U+304B+309A # [2000] +0x82F6 U+304D+309A # [2000] +0x82F7 U+304F+309A # [2000] +0x82F8 U+3051+309A # [2000] +0x82F9 U+3053+309A # [2000] +0x82FA # <reserved> +0x82FB # <reserved> +0x82FC # <reserved> +0x8340 U+30A1 # KATAKANA LETTER SMALL A +0x8341 U+30A2 # KATAKANA LETTER A +0x8342 U+30A3 # KATAKANA LETTER SMALL I +0x8343 U+30A4 # KATAKANA LETTER I +0x8344 U+30A5 # KATAKANA LETTER SMALL U +0x8345 U+30A6 # KATAKANA LETTER U +0x8346 U+30A7 # KATAKANA LETTER SMALL E +0x8347 U+30A8 # KATAKANA LETTER E +0x8348 U+30A9 # KATAKANA LETTER SMALL O +0x8349 U+30AA # KATAKANA LETTER O +0x834A U+30AB # KATAKANA LETTER KA +0x834B U+30AC # KATAKANA LETTER GA +0x834C U+30AD # KATAKANA LETTER KI +0x834D U+30AE # KATAKANA LETTER GI +0x834E U+30AF # KATAKANA LETTER KU +0x834F U+30B0 # KATAKANA LETTER GU +0x8350 U+30B1 # KATAKANA LETTER KE +0x8351 U+30B2 # KATAKANA LETTER GE +0x8352 U+30B3 # KATAKANA LETTER KO +0x8353 U+30B4 # KATAKANA LETTER GO +0x8354 U+30B5 # KATAKANA LETTER SA +0x8355 U+30B6 # KATAKANA LETTER ZA +0x8356 U+30B7 # KATAKANA LETTER SI +0x8357 U+30B8 # KATAKANA LETTER ZI +0x8358 U+30B9 # KATAKANA LETTER SU +0x8359 U+30BA # KATAKANA LETTER ZU +0x835A U+30BB # KATAKANA LETTER SE +0x835B U+30BC # KATAKANA LETTER ZE +0x835C U+30BD # KATAKANA LETTER SO +0x835D U+30BE # KATAKANA LETTER ZO +0x835E U+30BF # KATAKANA LETTER TA +0x835F U+30C0 # KATAKANA LETTER DA +0x8360 U+30C1 # KATAKANA LETTER TI +0x8361 U+30C2 # KATAKANA LETTER DI +0x8362 U+30C3 # KATAKANA LETTER SMALL TU +0x8363 U+30C4 # KATAKANA LETTER TU +0x8364 U+30C5 # KATAKANA LETTER DU +0x8365 U+30C6 # KATAKANA LETTER TE +0x8366 U+30C7 # KATAKANA LETTER DE +0x8367 U+30C8 # KATAKANA LETTER TO +0x8368 U+30C9 # KATAKANA LETTER DO +0x8369 U+30CA # KATAKANA LETTER NA +0x836A U+30CB # KATAKANA LETTER NI +0x836B U+30CC # KATAKANA LETTER NU +0x836C U+30CD # KATAKANA LETTER NE +0x836D U+30CE # KATAKANA LETTER NO +0x836E U+30CF # KATAKANA LETTER HA +0x836F U+30D0 # KATAKANA LETTER BA +0x8370 U+30D1 # KATAKANA LETTER PA +0x8371 U+30D2 # KATAKANA LETTER HI +0x8372 U+30D3 # KATAKANA LETTER BI +0x8373 U+30D4 # KATAKANA LETTER PI +0x8374 U+30D5 # KATAKANA LETTER HU +0x8375 U+30D6 # KATAKANA LETTER BU +0x8376 U+30D7 # KATAKANA LETTER PU +0x8377 U+30D8 # KATAKANA LETTER HE +0x8378 U+30D9 # KATAKANA LETTER BE +0x8379 U+30DA # KATAKANA LETTER PE +0x837A U+30DB # KATAKANA LETTER HO +0x837B U+30DC # KATAKANA LETTER BO +0x837C U+30DD # KATAKANA LETTER PO +0x837D U+30DE # KATAKANA LETTER MA +0x837E U+30DF # KATAKANA LETTER MI +0x8380 U+30E0 # KATAKANA LETTER MU +0x8381 U+30E1 # KATAKANA LETTER ME +0x8382 U+30E2 # KATAKANA LETTER MO +0x8383 U+30E3 # KATAKANA LETTER SMALL YA +0x8384 U+30E4 # KATAKANA LETTER YA +0x8385 U+30E5 # KATAKANA LETTER SMALL YU +0x8386 U+30E6 # KATAKANA LETTER YU +0x8387 U+30E7 # KATAKANA LETTER SMALL YO +0x8388 U+30E8 # KATAKANA LETTER YO +0x8389 U+30E9 # KATAKANA LETTER RA +0x838A U+30EA # KATAKANA LETTER RI +0x838B U+30EB # KATAKANA LETTER RU +0x838C U+30EC # KATAKANA LETTER RE +0x838D U+30ED # KATAKANA LETTER RO +0x838E U+30EE # KATAKANA LETTER SMALL WA +0x838F U+30EF # KATAKANA LETTER WA +0x8390 U+30F0 # KATAKANA LETTER WI +0x8391 U+30F1 # KATAKANA LETTER WE +0x8392 U+30F2 # KATAKANA LETTER WO +0x8393 U+30F3 # KATAKANA LETTER N +0x8394 U+30F4 # KATAKANA LETTER VU +0x8395 U+30F5 # KATAKANA LETTER SMALL KA +0x8396 U+30F6 # KATAKANA LETTER SMALL KE +0x8397 U+30AB+309A # [2000] +0x8398 U+30AD+309A # [2000] +0x8399 U+30AF+309A # [2000] +0x839A U+30B1+309A # [2000] +0x839B U+30B3+309A # [2000] +0x839C U+30BB+309A # [2000] +0x839D U+30C4+309A # [2000] +0x839E U+30C8+309A # [2000] +0x839F U+0391 # GREEK CAPITAL LETTER ALPHA +0x83A0 U+0392 # GREEK CAPITAL LETTER BETA +0x83A1 U+0393 # GREEK CAPITAL LETTER GAMMA +0x83A2 U+0394 # GREEK CAPITAL LETTER DELTA +0x83A3 U+0395 # GREEK CAPITAL LETTER EPSILON +0x83A4 U+0396 # GREEK CAPITAL LETTER ZETA +0x83A5 U+0397 # GREEK CAPITAL LETTER ETA +0x83A6 U+0398 # GREEK CAPITAL LETTER THETA +0x83A7 U+0399 # GREEK CAPITAL LETTER IOTA +0x83A8 U+039A # GREEK CAPITAL LETTER KAPPA +0x83A9 U+039B # GREEK CAPITAL LETTER LAMDA +0x83AA U+039C # GREEK CAPITAL LETTER MU +0x83AB U+039D # GREEK CAPITAL LETTER NU +0x83AC U+039E # GREEK CAPITAL LETTER XI +0x83AD U+039F # GREEK CAPITAL LETTER OMICRON +0x83AE U+03A0 # GREEK CAPITAL LETTER PI +0x83AF U+03A1 # GREEK CAPITAL LETTER RHO +0x83B0 U+03A3 # GREEK CAPITAL LETTER SIGMA +0x83B1 U+03A4 # GREEK CAPITAL LETTER TAU +0x83B2 U+03A5 # GREEK CAPITAL LETTER UPSILON +0x83B3 U+03A6 # GREEK CAPITAL LETTER PHI +0x83B4 U+03A7 # GREEK CAPITAL LETTER CHI +0x83B5 U+03A8 # GREEK CAPITAL LETTER PSI +0x83B6 U+03A9 # GREEK CAPITAL LETTER OMEGA +0x83B7 U+2664 # WHITE SPADE SUIT [2000] +0x83B8 U+2660 # BLACK SPADE SUIT [2000] +0x83B9 U+2662 # WHITE DIAMOND SUIT [2000] +0x83BA U+2666 # BLACK DIAMOND SUIT [2000] +0x83BB U+2661 # WHITE HEART SUIT [2000] +0x83BC U+2665 # BLACK HEART SUIT [2000] +0x83BD U+2667 # WHITE CLUB SUIT [2000] +0x83BE U+2663 # BLACK CLUB SUIT [2000] +0x83BF U+03B1 # GREEK SMALL LETTER ALPHA +0x83C0 U+03B2 # GREEK SMALL LETTER BETA +0x83C1 U+03B3 # GREEK SMALL LETTER GAMMA +0x83C2 U+03B4 # GREEK SMALL LETTER DELTA +0x83C3 U+03B5 # GREEK SMALL LETTER EPSILON +0x83C4 U+03B6 # GREEK SMALL LETTER ZETA +0x83C5 U+03B7 # GREEK SMALL LETTER ETA +0x83C6 U+03B8 # GREEK SMALL LETTER THETA +0x83C7 U+03B9 # GREEK SMALL LETTER IOTA +0x83C8 U+03BA # GREEK SMALL LETTER KAPPA +0x83C9 U+03BB # GREEK SMALL LETTER LAMDA +0x83CA U+03BC # GREEK SMALL LETTER MU +0x83CB U+03BD # GREEK SMALL LETTER NU +0x83CC U+03BE # GREEK SMALL LETTER XI +0x83CD U+03BF # GREEK SMALL LETTER OMICRON +0x83CE U+03C0 # GREEK SMALL LETTER PI +0x83CF U+03C1 # GREEK SMALL LETTER RHO +0x83D0 U+03C3 # GREEK SMALL LETTER SIGMA +0x83D1 U+03C4 # GREEK SMALL LETTER TAU +0x83D2 U+03C5 # GREEK SMALL LETTER UPSILON +0x83D3 U+03C6 # GREEK SMALL LETTER PHI +0x83D4 U+03C7 # GREEK SMALL LETTER CHI +0x83D5 U+03C8 # GREEK SMALL LETTER PSI +0x83D6 U+03C9 # GREEK SMALL LETTER OMEGA +0x83D7 U+03C2 # GREEK SMALL LETTER FINAL SIGMA [2000] +0x83D8 U+24F5 # DOUBLE CIRCLED DIGIT ONE [2000] [Unicode3.2] +0x83D9 U+24F6 # DOUBLE CIRCLED DIGIT TWO [2000] [Unicode3.2] +0x83DA U+24F7 # DOUBLE CIRCLED DIGIT THREE [2000] [Unicode3.2] +0x83DB U+24F8 # DOUBLE CIRCLED DIGIT FOUR [2000] [Unicode3.2] +0x83DC U+24F9 # DOUBLE CIRCLED DIGIT FIVE [2000] [Unicode3.2] +0x83DD U+24FA # DOUBLE CIRCLED DIGIT SIX [2000] [Unicode3.2] +0x83DE U+24FB # DOUBLE CIRCLED DIGIT SEVEN [2000] [Unicode3.2] +0x83DF U+24FC # DOUBLE CIRCLED DIGIT EIGHT [2000] [Unicode3.2] +0x83E0 U+24FD # DOUBLE CIRCLED DIGIT NINE [2000] [Unicode3.2] +0x83E1 U+24FE # DOUBLE CIRCLED NUMBER TEN [2000] [Unicode3.2] +0x83E2 U+2616 # WHITE SHOGI PIECE [2000] [Unicode3.2] +0x83E3 U+2617 # BLACK SHOGI PIECE [2000] [Unicode3.2] +0x83E4 U+3020 # POSTAL MARK FACE [2000] +0x83E5 U+260E # BLACK TELEPHONE [2000] +0x83E6 U+2600 # BLACK SUN WITH RAYS [2000] +0x83E7 U+2601 # CLOUD [2000] +0x83E8 U+2602 # UMBRELLA [2000] +0x83E9 U+2603 # SNOWMAN [2000] +0x83EA U+2668 # HOT SPRINGS [2000] +0x83EB U+25B1 # WHITE PARALLELOGRAM [2000] +0x83EC U+31F0 # KATAKANA LETTER SMALL KU [2000] [Unicode3.2] +0x83ED U+31F1 # KATAKANA LETTER SMALL SI [2000] [Unicode3.2] +0x83EE U+31F2 # KATAKANA LETTER SMALL SU [2000] [Unicode3.2] +0x83EF U+31F3 # KATAKANA LETTER SMALL TO [2000] [Unicode3.2] +0x83F0 U+31F4 # KATAKANA LETTER SMALL NU [2000] [Unicode3.2] +0x83F1 U+31F5 # KATAKANA LETTER SMALL HA [2000] [Unicode3.2] +0x83F2 U+31F6 # KATAKANA LETTER SMALL HI [2000] [Unicode3.2] +0x83F3 U+31F7 # KATAKANA LETTER SMALL HU [2000] [Unicode3.2] +0x83F4 U+31F8 # KATAKANA LETTER SMALL HE [2000] [Unicode3.2] +0x83F5 U+31F9 # KATAKANA LETTER SMALL HO [2000] [Unicode3.2] +0x83F6 U+31F7+309A # [2000] +0x83F7 U+31FA # KATAKANA LETTER SMALL MU [2000] [Unicode3.2] +0x83F8 U+31FB # KATAKANA LETTER SMALL RA [2000] [Unicode3.2] +0x83F9 U+31FC # KATAKANA LETTER SMALL RI [2000] [Unicode3.2] +0x83FA U+31FD # KATAKANA LETTER SMALL RU [2000] [Unicode3.2] +0x83FB U+31FE # KATAKANA LETTER SMALL RE [2000] [Unicode3.2] +0x83FC U+31FF # KATAKANA LETTER SMALL RO [2000] [Unicode3.2] +0x8440 U+0410 # CYRILLIC CAPITAL LETTER A +0x8441 U+0411 # CYRILLIC CAPITAL LETTER BE +0x8442 U+0412 # CYRILLIC CAPITAL LETTER VE +0x8443 U+0413 # CYRILLIC CAPITAL LETTER GHE +0x8444 U+0414 # CYRILLIC CAPITAL LETTER DE +0x8445 U+0415 # CYRILLIC CAPITAL LETTER IE +0x8446 U+0401 # CYRILLIC CAPITAL LETTER IO +0x8447 U+0416 # CYRILLIC CAPITAL LETTER ZHE +0x8448 U+0417 # CYRILLIC CAPITAL LETTER ZE +0x8449 U+0418 # CYRILLIC CAPITAL LETTER I +0x844A U+0419 # CYRILLIC CAPITAL LETTER SHORT I +0x844B U+041A # CYRILLIC CAPITAL LETTER KA +0x844C U+041B # CYRILLIC CAPITAL LETTER EL +0x844D U+041C # CYRILLIC CAPITAL LETTER EM +0x844E U+041D # CYRILLIC CAPITAL LETTER EN +0x844F U+041E # CYRILLIC CAPITAL LETTER O +0x8450 U+041F # CYRILLIC CAPITAL LETTER PE +0x8451 U+0420 # CYRILLIC CAPITAL LETTER ER +0x8452 U+0421 # CYRILLIC CAPITAL LETTER ES +0x8453 U+0422 # CYRILLIC CAPITAL LETTER TE +0x8454 U+0423 # CYRILLIC CAPITAL LETTER U +0x8455 U+0424 # CYRILLIC CAPITAL LETTER EF +0x8456 U+0425 # CYRILLIC CAPITAL LETTER HA +0x8457 U+0426 # CYRILLIC CAPITAL LETTER TSE +0x8458 U+0427 # CYRILLIC CAPITAL LETTER CHE +0x8459 U+0428 # CYRILLIC CAPITAL LETTER SHA +0x845A U+0429 # CYRILLIC CAPITAL LETTER SHCHA +0x845B U+042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x845C U+042B # CYRILLIC CAPITAL LETTER YERU +0x845D U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x845E U+042D # CYRILLIC CAPITAL LETTER E +0x845F U+042E # CYRILLIC CAPITAL LETTER YU +0x8460 U+042F # CYRILLIC CAPITAL LETTER YA +0x8461 U+23BE # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT [2000] [Unicode3.2] +0x8462 U+23BF # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT [2000] [Unicode3.2] +0x8463 U+23C0 # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE [2000] [Unicode3.2] +0x8464 U+23C1 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE [2000] [Unicode3.2] +0x8465 U+23C2 # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE [2000] [Unicode3.2] +0x8466 U+23C3 # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE [2000] [Unicode3.2] +0x8467 U+23C4 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE [2000] [Unicode3.2] +0x8468 U+23C5 # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE [2000] [Unicode3.2] +0x8469 U+23C6 # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE [2000] [Unicode3.2] +0x846A U+23C7 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE [2000] [Unicode3.2] +0x846B U+23C8 # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE [2000] [Unicode3.2] +0x846C U+23C9 # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL [2000] [Unicode3.2] +0x846D U+23CA # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL [2000] [Unicode3.2] +0x846E U+23CB # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT [2000] [Unicode3.2] +0x846F U+23CC # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT [2000] [Unicode3.2] +0x8470 U+0430 # CYRILLIC SMALL LETTER A +0x8471 U+0431 # CYRILLIC SMALL LETTER BE +0x8472 U+0432 # CYRILLIC SMALL LETTER VE +0x8473 U+0433 # CYRILLIC SMALL LETTER GHE +0x8474 U+0434 # CYRILLIC SMALL LETTER DE +0x8475 U+0435 # CYRILLIC SMALL LETTER IE +0x8476 U+0451 # CYRILLIC SMALL LETTER IO +0x8477 U+0436 # CYRILLIC SMALL LETTER ZHE +0x8478 U+0437 # CYRILLIC SMALL LETTER ZE +0x8479 U+0438 # CYRILLIC SMALL LETTER I +0x847A U+0439 # CYRILLIC SMALL LETTER SHORT I +0x847B U+043A # CYRILLIC SMALL LETTER KA +0x847C U+043B # CYRILLIC SMALL LETTER EL +0x847D U+043C # CYRILLIC SMALL LETTER EM +0x847E U+043D # CYRILLIC SMALL LETTER EN +0x8480 U+043E # CYRILLIC SMALL LETTER O +0x8481 U+043F # CYRILLIC SMALL LETTER PE +0x8482 U+0440 # CYRILLIC SMALL LETTER ER +0x8483 U+0441 # CYRILLIC SMALL LETTER ES +0x8484 U+0442 # CYRILLIC SMALL LETTER TE +0x8485 U+0443 # CYRILLIC SMALL LETTER U +0x8486 U+0444 # CYRILLIC SMALL LETTER EF +0x8487 U+0445 # CYRILLIC SMALL LETTER HA +0x8488 U+0446 # CYRILLIC SMALL LETTER TSE +0x8489 U+0447 # CYRILLIC SMALL LETTER CHE +0x848A U+0448 # CYRILLIC SMALL LETTER SHA +0x848B U+0449 # CYRILLIC SMALL LETTER SHCHA +0x848C U+044A # CYRILLIC SMALL LETTER HARD SIGN +0x848D U+044B # CYRILLIC SMALL LETTER YERU +0x848E U+044C # CYRILLIC SMALL LETTER SOFT SIGN +0x848F U+044D # CYRILLIC SMALL LETTER E +0x8490 U+044E # CYRILLIC SMALL LETTER YU +0x8491 U+044F # CYRILLIC SMALL LETTER YA +0x8492 U+30F7 # KATAKANA LETTER VA [2000] +0x8493 U+30F8 # KATAKANA LETTER VI [2000] +0x8494 U+30F9 # KATAKANA LETTER VE [2000] +0x8495 U+30FA # KATAKANA LETTER VO [2000] +0x8496 U+22DA # LESS-THAN EQUAL TO OR GREATER-THAN [2000] +0x8497 U+22DB # GREATER-THAN EQUAL TO OR LESS-THAN [2000] +0x8498 U+2153 # VULGAR FRACTION ONE THIRD [2000] +0x8499 U+2154 # VULGAR FRACTION TWO THIRDS [2000] +0x849A U+2155 # VULGAR FRACTION ONE FIFTH [2000] +0x849B U+2713 # CHECK MARK [2000] +0x849C U+2318 # PLACE OF INTEREST SIGN [2000] +0x849D U+2423 # OPEN BOX [2000] +0x849E U+23CE # RETURN SYMBOL [2000] [Unicode3.2] +0x849F U+2500 # BOX DRAWINGS LIGHT HORIZONTAL [1983] +0x84A0 U+2502 # BOX DRAWINGS LIGHT VERTICAL [1983] +0x84A1 U+250C # BOX DRAWINGS LIGHT DOWN AND RIGHT [1983] +0x84A2 U+2510 # BOX DRAWINGS LIGHT DOWN AND LEFT [1983] +0x84A3 U+2518 # BOX DRAWINGS LIGHT UP AND LEFT [1983] +0x84A4 U+2514 # BOX DRAWINGS LIGHT UP AND RIGHT [1983] +0x84A5 U+251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT [1983] +0x84A6 U+252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL [1983] +0x84A7 U+2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT [1983] +0x84A8 U+2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL [1983] +0x84A9 U+253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL [1983] +0x84AA U+2501 # BOX DRAWINGS HEAVY HORIZONTAL [1983] +0x84AB U+2503 # BOX DRAWINGS HEAVY VERTICAL [1983] +0x84AC U+250F # BOX DRAWINGS HEAVY DOWN AND RIGHT [1983] +0x84AD U+2513 # BOX DRAWINGS HEAVY DOWN AND LEFT [1983] +0x84AE U+251B # BOX DRAWINGS HEAVY UP AND LEFT [1983] +0x84AF U+2517 # BOX DRAWINGS HEAVY UP AND RIGHT [1983] +0x84B0 U+2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT [1983] +0x84B1 U+2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL [1983] +0x84B2 U+252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT [1983] +0x84B3 U+253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL [1983] +0x84B4 U+254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL [1983] +0x84B5 U+2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT [1983] +0x84B6 U+252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY [1983] +0x84B7 U+2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT [1983] +0x84B8 U+2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY [1983] +0x84B9 U+253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY [1983] +0x84BA U+251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY [1983] +0x84BB U+2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT [1983] +0x84BC U+2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY [1983] +0x84BD U+2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT [1983] +0x84BE U+2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT [1983] +0x84BF U+3251 # CIRCLED NUMBER TWENTY ONE [2000] [Unicode3.2] +0x84C0 U+3252 # CIRCLED NUMBER TWENTY TWO [2000] [Unicode3.2] +0x84C1 U+3253 # CIRCLED NUMBER TWENTY THREE [2000] [Unicode3.2] +0x84C2 U+3254 # CIRCLED NUMBER TWENTY FOUR [2000] [Unicode3.2] +0x84C3 U+3255 # CIRCLED NUMBER TWENTY FIVE [2000] [Unicode3.2] +0x84C4 U+3256 # CIRCLED NUMBER TWENTY SIX [2000] [Unicode3.2] +0x84C5 U+3257 # CIRCLED NUMBER TWENTY SEVEN [2000] [Unicode3.2] +0x84C6 U+3258 # CIRCLED NUMBER TWENTY EIGHT [2000] [Unicode3.2] +0x84C7 U+3259 # CIRCLED NUMBER TWENTY NINE [2000] [Unicode3.2] +0x84C8 U+325A # CIRCLED NUMBER THIRTY [2000] [Unicode3.2] +0x84C9 U+325B # CIRCLED NUMBER THIRTY ONE [2000] [Unicode3.2] +0x84CA U+325C # CIRCLED NUMBER THIRTY TWO [2000] [Unicode3.2] +0x84CB U+325D # CIRCLED NUMBER THIRTY THREE [2000] [Unicode3.2] +0x84CC U+325E # CIRCLED NUMBER THIRTY FOUR [2000] [Unicode3.2] +0x84CD U+325F # CIRCLED NUMBER THIRTY FIVE [2000] [Unicode3.2] +0x84CE U+32B1 # CIRCLED NUMBER THIRTY SIX [2000] [Unicode3.2] +0x84CF U+32B2 # CIRCLED NUMBER THIRTY SEVEN [2000] [Unicode3.2] +0x84D0 U+32B3 # CIRCLED NUMBER THIRTY EIGHT [2000] [Unicode3.2] +0x84D1 U+32B4 # CIRCLED NUMBER THIRTY NINE [2000] [Unicode3.2] +0x84D2 U+32B5 # CIRCLED NUMBER FORTY [2000] [Unicode3.2] +0x84D3 U+32B6 # CIRCLED NUMBER FORTY ONE [2000] [Unicode3.2] +0x84D4 U+32B7 # CIRCLED NUMBER FORTY TWO [2000] [Unicode3.2] +0x84D5 U+32B8 # CIRCLED NUMBER FORTY THREE [2000] [Unicode3.2] +0x84D6 U+32B9 # CIRCLED NUMBER FORTY FOUR [2000] [Unicode3.2] +0x84D7 U+32BA # CIRCLED NUMBER FORTY FIVE [2000] [Unicode3.2] +0x84D8 U+32BB # CIRCLED NUMBER FORTY SIX [2000] [Unicode3.2] +0x84D9 U+32BC # CIRCLED NUMBER FORTY SEVEN [2000] [Unicode3.2] +0x84DA U+32BD # CIRCLED NUMBER FORTY EIGHT [2000] [Unicode3.2] +0x84DB U+32BE # CIRCLED NUMBER FORTY NINE [2000] [Unicode3.2] +0x84DC U+32BF # CIRCLED NUMBER FIFTY [2000] [Unicode3.2] +0x84DD # <reserved> +0x84DE # <reserved> +0x84DF # <reserved> +0x84E0 # <reserved> +0x84E1 # <reserved> +0x84E2 # <reserved> +0x84E3 # <reserved> +0x84E4 # <reserved> +0x84E5 U+25D0 # CIRCLE WITH LEFT HALF BLACK [2000] +0x84E6 U+25D1 # CIRCLE WITH RIGHT HALF BLACK [2000] +0x84E7 U+25D2 # CIRCLE WITH LOWER HALF BLACK [2000] +0x84E8 U+25D3 # CIRCLE WITH UPPER HALF BLACK [2000] +0x84E9 U+203C # DOUBLE EXCLAMATION MARK [2000] +0x84EA U+2047 # DOUBLE QUESTION MARK [2000] [Unicode3.2] +0x84EB U+2048 # QUESTION EXCLAMATION MARK [2000] +0x84EC U+2049 # EXCLAMATION QUESTION MARK [2000] +0x84ED U+01CD # LATIN CAPITAL LETTER A WITH CARON [2000] +0x84EE U+01CE # LATIN SMALL LETTER A WITH CARON [2000] +0x84EF U+01D0 # LATIN SMALL LETTER I WITH CARON [2000] +0x84F0 U+1E3E # LATIN CAPITAL LETTER M WITH ACUTE [2000] +0x84F1 U+1E3F # LATIN SMALL LETTER M WITH ACUTE [2000] +0x84F2 U+01F8 # LATIN CAPITAL LETTER N WITH GRAVE [2000] +0x84F3 U+01F9 # LATIN SMALL LETTER N WITH GRAVE [2000] +0x84F4 U+01D1 # LATIN CAPITAL LETTER O WITH CARON [2000] +0x84F5 U+01D2 # LATIN SMALL LETTER O WITH CARON [2000] +0x84F6 U+01D4 # LATIN SMALL LETTER U WITH CARON [2000] +0x84F7 U+01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON [2000] +0x84F8 U+01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE [2000] +0x84F9 U+01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON [2000] +0x84FA U+01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE [2000] +0x84FB # <reserved> +0x84FC # <reserved> +0x8540 U+20AC # EURO SIGN [2000] +0x8541 U+00A0 # NO-BREAK SPACE [2000] +0x8542 U+00A1 # INVERTED EXCLAMATION MARK [2000] +0x8543 U+00A4 # CURRENCY SIGN [2000] +0x8544 U+00A6 # BROKEN BAR [2000] +0x8545 U+00A9 # COPYRIGHT SIGN [2000] +0x8546 U+00AA # FEMININE ORDINAL INDICATOR [2000] +0x8547 U+00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK [2000] +0x8548 U+00AD # SOFT HYPHEN [2000] +0x8549 U+00AE # REGISTERED SIGN [2000] +0x854A U+00AF # MACRON [2000] +0x854B U+00B2 # SUPERSCRIPT TWO [2000] +0x854C U+00B3 # SUPERSCRIPT THREE [2000] +0x854D U+00B7 # MIDDLE DOT [2000] +0x854E U+00B8 # CEDILLA [2000] +0x854F U+00B9 # SUPERSCRIPT ONE [2000] +0x8550 U+00BA # MASCULINE ORDINAL INDICATOR [2000] +0x8551 U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK [2000] +0x8552 U+00BC # VULGAR FRACTION ONE QUARTER [2000] +0x8553 U+00BD # VULGAR FRACTION ONE HALF [2000] +0x8554 U+00BE # VULGAR FRACTION THREE QUARTERS [2000] +0x8555 U+00BF # INVERTED QUESTION MARK [2000] +0x8556 U+00C0 # LATIN CAPITAL LETTER A WITH GRAVE [2000] +0x8557 U+00C1 # LATIN CAPITAL LETTER A WITH ACUTE [2000] +0x8558 U+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX [2000] +0x8559 U+00C3 # LATIN CAPITAL LETTER A WITH TILDE [2000] +0x855A U+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS [2000] +0x855B U+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE [2000] +0x855C U+00C6 # LATIN CAPITAL LETTER AE [2000] +0x855D U+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA [2000] +0x855E U+00C8 # LATIN CAPITAL LETTER E WITH GRAVE [2000] +0x855F U+00C9 # LATIN CAPITAL LETTER E WITH ACUTE [2000] +0x8560 U+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX [2000] +0x8561 U+00CB # LATIN CAPITAL LETTER E WITH DIAERESIS [2000] +0x8562 U+00CC # LATIN CAPITAL LETTER I WITH GRAVE [2000] +0x8563 U+00CD # LATIN CAPITAL LETTER I WITH ACUTE [2000] +0x8564 U+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX [2000] +0x8565 U+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS [2000] +0x8566 U+00D0 # LATIN CAPITAL LETTER ETH [2000] +0x8567 U+00D1 # LATIN CAPITAL LETTER N WITH TILDE [2000] +0x8568 U+00D2 # LATIN CAPITAL LETTER O WITH GRAVE [2000] +0x8569 U+00D3 # LATIN CAPITAL LETTER O WITH ACUTE [2000] +0x856A U+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX [2000] +0x856B U+00D5 # LATIN CAPITAL LETTER O WITH TILDE [2000] +0x856C U+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS [2000] +0x856D U+00D8 # LATIN CAPITAL LETTER O WITH STROKE [2000] +0x856E U+00D9 # LATIN CAPITAL LETTER U WITH GRAVE [2000] +0x856F U+00DA # LATIN CAPITAL LETTER U WITH ACUTE [2000] +0x8570 U+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX [2000] +0x8571 U+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS [2000] +0x8572 U+00DD # LATIN CAPITAL LETTER Y WITH ACUTE [2000] +0x8573 U+00DE # LATIN CAPITAL LETTER THORN [2000] +0x8574 U+00DF # LATIN SMALL LETTER SHARP S [2000] +0x8575 U+00E0 # LATIN SMALL LETTER A WITH GRAVE [2000] +0x8576 U+00E1 # LATIN SMALL LETTER A WITH ACUTE [2000] +0x8577 U+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX [2000] +0x8578 U+00E3 # LATIN SMALL LETTER A WITH TILDE [2000] +0x8579 U+00E4 # LATIN SMALL LETTER A WITH DIAERESIS [2000] +0x857A U+00E5 # LATIN SMALL LETTER A WITH RING ABOVE [2000] +0x857B U+00E6 # LATIN SMALL LETTER AE [2000] +0x857C U+00E7 # LATIN SMALL LETTER C WITH CEDILLA [2000] +0x857D U+00E8 # LATIN SMALL LETTER E WITH GRAVE [2000] +0x857E U+00E9 # LATIN SMALL LETTER E WITH ACUTE [2000] +0x8580 U+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX [2000] +0x8581 U+00EB # LATIN SMALL LETTER E WITH DIAERESIS [2000] +0x8582 U+00EC # LATIN SMALL LETTER I WITH GRAVE [2000] +0x8583 U+00ED # LATIN SMALL LETTER I WITH ACUTE [2000] +0x8584 U+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX [2000] +0x8585 U+00EF # LATIN SMALL LETTER I WITH DIAERESIS [2000] +0x8586 U+00F0 # LATIN SMALL LETTER ETH [2000] +0x8587 U+00F1 # LATIN SMALL LETTER N WITH TILDE [2000] +0x8588 U+00F2 # LATIN SMALL LETTER O WITH GRAVE [2000] +0x8589 U+00F3 # LATIN SMALL LETTER O WITH ACUTE [2000] +0x858A U+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX [2000] +0x858B U+00F5 # LATIN SMALL LETTER O WITH TILDE [2000] +0x858C U+00F6 # LATIN SMALL LETTER O WITH DIAERESIS [2000] +0x858D U+00F8 # LATIN SMALL LETTER O WITH STROKE [2000] +0x858E U+00F9 # LATIN SMALL LETTER U WITH GRAVE [2000] +0x858F U+00FA # LATIN SMALL LETTER U WITH ACUTE [2000] +0x8590 U+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX [2000] +0x8591 U+00FC # LATIN SMALL LETTER U WITH DIAERESIS [2000] +0x8592 U+00FD # LATIN SMALL LETTER Y WITH ACUTE [2000] +0x8593 U+00FE # LATIN SMALL LETTER THORN [2000] +0x8594 U+00FF # LATIN SMALL LETTER Y WITH DIAERESIS [2000] +0x8595 U+0100 # LATIN CAPITAL LETTER A WITH MACRON [2000] +0x8596 U+012A # LATIN CAPITAL LETTER I WITH MACRON [2000] +0x8597 U+016A # LATIN CAPITAL LETTER U WITH MACRON [2000] +0x8598 U+0112 # LATIN CAPITAL LETTER E WITH MACRON [2000] +0x8599 U+014C # LATIN CAPITAL LETTER O WITH MACRON [2000] +0x859A U+0101 # LATIN SMALL LETTER A WITH MACRON [2000] +0x859B U+012B # LATIN SMALL LETTER I WITH MACRON [2000] +0x859C U+016B # LATIN SMALL LETTER U WITH MACRON [2000] +0x859D U+0113 # LATIN SMALL LETTER E WITH MACRON [2000] +0x859E U+014D # LATIN SMALL LETTER O WITH MACRON [2000] +0x859F U+0104 # LATIN CAPITAL LETTER A WITH OGONEK [2000] +0x85A0 U+02D8 # BREVE [2000] +0x85A1 U+0141 # LATIN CAPITAL LETTER L WITH STROKE [2000] +0x85A2 U+013D # LATIN CAPITAL LETTER L WITH CARON [2000] +0x85A3 U+015A # LATIN CAPITAL LETTER S WITH ACUTE [2000] +0x85A4 U+0160 # LATIN CAPITAL LETTER S WITH CARON [2000] +0x85A5 U+015E # LATIN CAPITAL LETTER S WITH CEDILLA [2000] +0x85A6 U+0164 # LATIN CAPITAL LETTER T WITH CARON [2000] +0x85A7 U+0179 # LATIN CAPITAL LETTER Z WITH ACUTE [2000] +0x85A8 U+017D # LATIN CAPITAL LETTER Z WITH CARON [2000] +0x85A9 U+017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE [2000] +0x85AA U+0105 # LATIN SMALL LETTER A WITH OGONEK [2000] +0x85AB U+02DB # OGONEK [2000] +0x85AC U+0142 # LATIN SMALL LETTER L WITH STROKE [2000] +0x85AD U+013E # LATIN SMALL LETTER L WITH CARON [2000] +0x85AE U+015B # LATIN SMALL LETTER S WITH ACUTE [2000] +0x85AF U+02C7 # CARON [2000] +0x85B0 U+0161 # LATIN SMALL LETTER S WITH CARON [2000] +0x85B1 U+015F # LATIN SMALL LETTER S WITH CEDILLA [2000] +0x85B2 U+0165 # LATIN SMALL LETTER T WITH CARON [2000] +0x85B3 U+017A # LATIN SMALL LETTER Z WITH ACUTE [2000] +0x85B4 U+02DD # DOUBLE ACUTE ACCENT [2000] +0x85B5 U+017E # LATIN SMALL LETTER Z WITH CARON [2000] +0x85B6 U+017C # LATIN SMALL LETTER Z WITH DOT ABOVE [2000] +0x85B7 U+0154 # LATIN CAPITAL LETTER R WITH ACUTE [2000] +0x85B8 U+0102 # LATIN CAPITAL LETTER A WITH BREVE [2000] +0x85B9 U+0139 # LATIN CAPITAL LETTER L WITH ACUTE [2000] +0x85BA U+0106 # LATIN CAPITAL LETTER C WITH ACUTE [2000] +0x85BB U+010C # LATIN CAPITAL LETTER C WITH CARON [2000] +0x85BC U+0118 # LATIN CAPITAL LETTER E WITH OGONEK [2000] +0x85BD U+011A # LATIN CAPITAL LETTER E WITH CARON [2000] +0x85BE U+010E # LATIN CAPITAL LETTER D WITH CARON [2000] +0x85BF U+0143 # LATIN CAPITAL LETTER N WITH ACUTE [2000] +0x85C0 U+0147 # LATIN CAPITAL LETTER N WITH CARON [2000] +0x85C1 U+0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE [2000] +0x85C2 U+0158 # LATIN CAPITAL LETTER R WITH CARON [2000] +0x85C3 U+016E # LATIN CAPITAL LETTER U WITH RING ABOVE [2000] +0x85C4 U+0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE [2000] +0x85C5 U+0162 # LATIN CAPITAL LETTER T WITH CEDILLA [2000] +0x85C6 U+0155 # LATIN SMALL LETTER R WITH ACUTE [2000] +0x85C7 U+0103 # LATIN SMALL LETTER A WITH BREVE [2000] +0x85C8 U+013A # LATIN SMALL LETTER L WITH ACUTE [2000] +0x85C9 U+0107 # LATIN SMALL LETTER C WITH ACUTE [2000] +0x85CA U+010D # LATIN SMALL LETTER C WITH CARON [2000] +0x85CB U+0119 # LATIN SMALL LETTER E WITH OGONEK [2000] +0x85CC U+011B # LATIN SMALL LETTER E WITH CARON [2000] +0x85CD U+010F # LATIN SMALL LETTER D WITH CARON [2000] +0x85CE U+0111 # LATIN SMALL LETTER D WITH STROKE [2000] +0x85CF U+0144 # LATIN SMALL LETTER N WITH ACUTE [2000] +0x85D0 U+0148 # LATIN SMALL LETTER N WITH CARON [2000] +0x85D1 U+0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE [2000] +0x85D2 U+0159 # LATIN SMALL LETTER R WITH CARON [2000] +0x85D3 U+016F # LATIN SMALL LETTER U WITH RING ABOVE [2000] +0x85D4 U+0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE [2000] +0x85D5 U+0163 # LATIN SMALL LETTER T WITH CEDILLA [2000] +0x85D6 U+02D9 # DOT ABOVE [2000] +0x85D7 U+0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX [2000] +0x85D8 U+011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX [2000] +0x85D9 U+0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX [2000] +0x85DA U+0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX [2000] +0x85DB U+015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX [2000] +0x85DC U+016C # LATIN CAPITAL LETTER U WITH BREVE [2000] +0x85DD U+0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX [2000] +0x85DE U+011D # LATIN SMALL LETTER G WITH CIRCUMFLEX [2000] +0x85DF U+0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX [2000] +0x85E0 U+0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX [2000] +0x85E1 U+015D # LATIN SMALL LETTER S WITH CIRCUMFLEX [2000] +0x85E2 U+016D # LATIN SMALL LETTER U WITH BREVE [2000] +0x85E3 U+0271 # LATIN SMALL LETTER M WITH HOOK [2000] +0x85E4 U+028B # LATIN SMALL LETTER V WITH HOOK [2000] +0x85E5 U+027E # LATIN SMALL LETTER R WITH FISHHOOK [2000] +0x85E6 U+0283 # LATIN SMALL LETTER ESH [2000] +0x85E7 U+0292 # LATIN SMALL LETTER EZH [2000] +0x85E8 U+026C # LATIN SMALL LETTER L WITH BELT [2000] +0x85E9 U+026E # LATIN SMALL LETTER LEZH [2000] +0x85EA U+0279 # LATIN SMALL LETTER TURNED R [2000] +0x85EB U+0288 # LATIN SMALL LETTER T WITH RETROFLEX HOOK [2000] +0x85EC U+0256 # LATIN SMALL LETTER D WITH TAIL [2000] +0x85ED U+0273 # LATIN SMALL LETTER N WITH RETROFLEX HOOK [2000] +0x85EE U+027D # LATIN SMALL LETTER R WITH TAIL [2000] +0x85EF U+0282 # LATIN SMALL LETTER S WITH HOOK [2000] +0x85F0 U+0290 # LATIN SMALL LETTER Z WITH RETROFLEX HOOK [2000] +0x85F1 U+027B # LATIN SMALL LETTER TURNED R WITH HOOK [2000] +0x85F2 U+026D # LATIN SMALL LETTER L WITH RETROFLEX HOOK [2000] +0x85F3 U+025F # LATIN SMALL LETTER DOTLESS J WITH STROKE [2000] +0x85F4 U+0272 # LATIN SMALL LETTER N WITH LEFT HOOK [2000] +0x85F5 U+029D # LATIN SMALL LETTER J WITH CROSSED-TAIL [2000] +0x85F6 U+028E # LATIN SMALL LETTER TURNED Y [2000] +0x85F7 U+0261 # LATIN SMALL LETTER SCRIPT G [2000] +0x85F8 U+014B # LATIN SMALL LETTER ENG [2000] +0x85F9 U+0270 # LATIN SMALL LETTER TURNED M WITH LONG LEG [2000] +0x85FA U+0281 # LATIN LETTER SMALL CAPITAL INVERTED R [2000] +0x85FB U+0127 # LATIN SMALL LETTER H WITH STROKE [2000] +0x85FC U+0295 # LATIN LETTER PHARYNGEAL VOICED FRICATIVE [2000] +0x8640 U+0294 # LATIN LETTER GLOTTAL STOP [2000] +0x8641 U+0266 # LATIN SMALL LETTER H WITH HOOK [2000] +0x8642 U+0298 # LATIN LETTER BILABIAL CLICK [2000] +0x8643 U+01C2 # LATIN LETTER ALVEOLAR CLICK [2000] +0x8644 U+0253 # LATIN SMALL LETTER B WITH HOOK [2000] +0x8645 U+0257 # LATIN SMALL LETTER D WITH HOOK [2000] +0x8646 U+0284 # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK [2000] +0x8647 U+0260 # LATIN SMALL LETTER G WITH HOOK [2000] +0x8648 U+0193 # LATIN CAPITAL LETTER G WITH HOOK [2000] +0x8649 U+0153 # LATIN SMALL LIGATURE OE [2000] +0x864A U+0152 # LATIN CAPITAL LIGATURE OE [2000] +0x864B U+0268 # LATIN SMALL LETTER I WITH STROKE [2000] +0x864C U+0289 # LATIN SMALL LETTER U BAR [2000] +0x864D U+0258 # LATIN SMALL LETTER REVERSED E [2000] +0x864E U+0275 # LATIN SMALL LETTER BARRED O [2000] +0x864F U+0259 # LATIN SMALL LETTER SCHWA [2000] +0x8650 U+025C # LATIN SMALL LETTER REVERSED OPEN E [2000] +0x8651 U+025E # LATIN SMALL LETTER CLOSED REVERSED OPEN E [2000] +0x8652 U+0250 # LATIN SMALL LETTER TURNED A [2000] +0x8653 U+026F # LATIN SMALL LETTER TURNED M [2000] +0x8654 U+028A # LATIN SMALL LETTER UPSILON [2000] +0x8655 U+0264 # LATIN SMALL LETTER RAMS HORN [2000] +0x8656 U+028C # LATIN SMALL LETTER TURNED V [2000] +0x8657 U+0254 # LATIN SMALL LETTER OPEN O [2000] +0x8658 U+0251 # LATIN SMALL LETTER ALPHA [2000] +0x8659 U+0252 # LATIN SMALL LETTER TURNED ALPHA [2000] +0x865A U+028D # LATIN SMALL LETTER TURNED W [2000] +0x865B U+0265 # LATIN SMALL LETTER TURNED H [2000] +0x865C U+02A2 # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE [2000] +0x865D U+02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE [2000] +0x865E U+0255 # LATIN SMALL LETTER C WITH CURL [2000] +0x865F U+0291 # LATIN SMALL LETTER Z WITH CURL [2000] +0x8660 U+027A # LATIN SMALL LETTER TURNED R WITH LONG LEG [2000] +0x8661 U+0267 # LATIN SMALL LETTER HENG WITH HOOK [2000] +0x8662 U+025A # LATIN SMALL LETTER SCHWA WITH HOOK [2000] +0x8663 U+00E6+0300 # [2000] +0x8664 U+01FD # LATIN SMALL LETTER AE WITH ACUTE [2000] +0x8665 U+1F70 # GREEK SMALL LETTER ALPHA WITH VARIA [2000] +0x8666 U+1F71 # GREEK SMALL LETTER ALPHA WITH OXIA [2000] +0x8667 U+0254+0300 # [2000] +0x8668 U+0254+0301 # [2000] +0x8669 U+028C+0300 # [2000] +0x866A U+028C+0301 # [2000] +0x866B U+0259+0300 # [2000] +0x866C U+0259+0301 # [2000] +0x866D U+025A+0300 # [2000] +0x866E U+025A+0301 # [2000] +0x866F U+1F72 # GREEK SMALL LETTER EPSILON WITH VARIA [2000] +0x8670 U+1F73 # GREEK SMALL LETTER EPSILON WITH OXIA [2000] +0x8671 U+0361 # COMBINING DOUBLE INVERTED BREVE [2000] +0x8672 U+02C8 # MODIFIER LETTER VERTICAL LINE [2000] +0x8673 U+02CC # MODIFIER LETTER LOW VERTICAL LINE [2000] +0x8674 U+02D0 # MODIFIER LETTER TRIANGULAR COLON [2000] +0x8675 U+02D1 # MODIFIER LETTER HALF TRIANGULAR COLON [2000] +0x8676 U+0306 # COMBINING BREVE [2000] +0x8677 U+203F # UNDERTIE [2000] +0x8678 U+030B # COMBINING DOUBLE ACUTE ACCENT [2000] +0x8679 U+0301 # COMBINING ACUTE ACCENT [2000] +0x867A U+0304 # COMBINING MACRON [2000] +0x867B U+0300 # COMBINING GRAVE ACCENT [2000] +0x867C U+030F # COMBINING DOUBLE GRAVE ACCENT [2000] +0x867D U+030C # COMBINING CARON [2000] +0x867E U+0302 # COMBINING CIRCUMFLEX ACCENT [2000] +0x8680 U+02E5 # MODIFIER LETTER EXTRA-HIGH TONE BAR [2000] +0x8681 U+02E6 # MODIFIER LETTER HIGH TONE BAR [2000] +0x8682 U+02E7 # MODIFIER LETTER MID TONE BAR [2000] +0x8683 U+02E8 # MODIFIER LETTER LOW TONE BAR [2000] +0x8684 U+02E9 # MODIFIER LETTER EXTRA-LOW TONE BAR [2000] +0x8685 U+02E9+02E5 # [2000] +0x8686 U+02E5+02E9 # [2000] +0x8687 U+0325 # COMBINING RING BELOW [2000] +0x8688 U+032C # COMBINING CARON BELOW [2000] +0x8689 U+0339 # COMBINING RIGHT HALF RING BELOW [2000] +0x868A U+031C # COMBINING LEFT HALF RING BELOW [2000] +0x868B U+031F # COMBINING PLUS SIGN BELOW [2000] +0x868C U+0320 # COMBINING MINUS SIGN BELOW [2000] +0x868D U+0308 # COMBINING DIAERESIS [2000] +0x868E U+033D # COMBINING X ABOVE [2000] +0x868F U+0329 # COMBINING VERTICAL LINE BELOW [2000] +0x8690 U+032F # COMBINING INVERTED BREVE BELOW [2000] +0x8691 U+02DE # MODIFIER LETTER RHOTIC HOOK [2000] +0x8692 U+0324 # COMBINING DIAERESIS BELOW [2000] +0x8693 U+0330 # COMBINING TILDE BELOW [2000] +0x8694 U+033C # COMBINING SEAGULL BELOW [2000] +0x8695 U+0334 # COMBINING TILDE OVERLAY [2000] +0x8696 U+031D # COMBINING UP TACK BELOW [2000] +0x8697 U+031E # COMBINING DOWN TACK BELOW [2000] +0x8698 U+0318 # COMBINING LEFT TACK BELOW [2000] +0x8699 U+0319 # COMBINING RIGHT TACK BELOW [2000] +0x869A U+032A # COMBINING BRIDGE BELOW [2000] +0x869B U+033A # COMBINING INVERTED BRIDGE BELOW [2000] +0x869C U+033B # COMBINING SQUARE BELOW [2000] +0x869D U+0303 # COMBINING TILDE [2000] +0x869E U+031A # COMBINING LEFT ANGLE ABOVE [2000] +0x869F U+2776 # DINGBAT NEGATIVE CIRCLED DIGIT ONE [2000] +0x86A0 U+2777 # DINGBAT NEGATIVE CIRCLED DIGIT TWO [2000] +0x86A1 U+2778 # DINGBAT NEGATIVE CIRCLED DIGIT THREE [2000] +0x86A2 U+2779 # DINGBAT NEGATIVE CIRCLED DIGIT FOUR [2000] +0x86A3 U+277A # DINGBAT NEGATIVE CIRCLED DIGIT FIVE [2000] +0x86A4 U+277B # DINGBAT NEGATIVE CIRCLED DIGIT SIX [2000] +0x86A5 U+277C # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN [2000] +0x86A6 U+277D # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT [2000] +0x86A7 U+277E # DINGBAT NEGATIVE CIRCLED DIGIT NINE [2000] +0x86A8 U+277F # DINGBAT NEGATIVE CIRCLED NUMBER TEN [2000] +0x86A9 U+24EB # NEGATIVE CIRCLED NUMBER ELEVEN [2000] [Unicode3.2] +0x86AA U+24EC # NEGATIVE CIRCLED NUMBER TWELVE [2000] [Unicode3.2] +0x86AB U+24ED # NEGATIVE CIRCLED NUMBER THIRTEEN [2000] [Unicode3.2] +0x86AC U+24EE # NEGATIVE CIRCLED NUMBER FOURTEEN [2000] [Unicode3.2] +0x86AD U+24EF # NEGATIVE CIRCLED NUMBER FIFTEEN [2000] [Unicode3.2] +0x86AE U+24F0 # NEGATIVE CIRCLED NUMBER SIXTEEN [2000] [Unicode3.2] +0x86AF U+24F1 # NEGATIVE CIRCLED NUMBER SEVENTEEN [2000] [Unicode3.2] +0x86B0 U+24F2 # NEGATIVE CIRCLED NUMBER EIGHTEEN [2000] [Unicode3.2] +0x86B1 U+24F3 # NEGATIVE CIRCLED NUMBER NINETEEN [2000] [Unicode3.2] +0x86B2 U+24F4 # NEGATIVE CIRCLED NUMBER TWENTY [2000] [Unicode3.2] +0x86B3 U+2170 # SMALL ROMAN NUMERAL ONE [2000] +0x86B4 U+2171 # SMALL ROMAN NUMERAL TWO [2000] +0x86B5 U+2172 # SMALL ROMAN NUMERAL THREE [2000] +0x86B6 U+2173 # SMALL ROMAN NUMERAL FOUR [2000] +0x86B7 U+2174 # SMALL ROMAN NUMERAL FIVE [2000] +0x86B8 U+2175 # SMALL ROMAN NUMERAL SIX [2000] +0x86B9 U+2176 # SMALL ROMAN NUMERAL SEVEN [2000] +0x86BA U+2177 # SMALL ROMAN NUMERAL EIGHT [2000] +0x86BB U+2178 # SMALL ROMAN NUMERAL NINE [2000] +0x86BC U+2179 # SMALL ROMAN NUMERAL TEN [2000] +0x86BD U+217A # SMALL ROMAN NUMERAL ELEVEN [2000] +0x86BE U+217B # SMALL ROMAN NUMERAL TWELVE [2000] +0x86BF U+24D0 # CIRCLED LATIN SMALL LETTER A [2000] +0x86C0 U+24D1 # CIRCLED LATIN SMALL LETTER B [2000] +0x86C1 U+24D2 # CIRCLED LATIN SMALL LETTER C [2000] +0x86C2 U+24D3 # CIRCLED LATIN SMALL LETTER D [2000] +0x86C3 U+24D4 # CIRCLED LATIN SMALL LETTER E [2000] +0x86C4 U+24D5 # CIRCLED LATIN SMALL LETTER F [2000] +0x86C5 U+24D6 # CIRCLED LATIN SMALL LETTER G [2000] +0x86C6 U+24D7 # CIRCLED LATIN SMALL LETTER H [2000] +0x86C7 U+24D8 # CIRCLED LATIN SMALL LETTER I [2000] +0x86C8 U+24D9 # CIRCLED LATIN SMALL LETTER J [2000] +0x86C9 U+24DA # CIRCLED LATIN SMALL LETTER K [2000] +0x86CA U+24DB # CIRCLED LATIN SMALL LETTER L [2000] +0x86CB U+24DC # CIRCLED LATIN SMALL LETTER M [2000] +0x86CC U+24DD # CIRCLED LATIN SMALL LETTER N [2000] +0x86CD U+24DE # CIRCLED LATIN SMALL LETTER O [2000] +0x86CE U+24DF # CIRCLED LATIN SMALL LETTER P [2000] +0x86CF U+24E0 # CIRCLED LATIN SMALL LETTER Q [2000] +0x86D0 U+24E1 # CIRCLED LATIN SMALL LETTER R [2000] +0x86D1 U+24E2 # CIRCLED LATIN SMALL LETTER S [2000] +0x86D2 U+24E3 # CIRCLED LATIN SMALL LETTER T [2000] +0x86D3 U+24E4 # CIRCLED LATIN SMALL LETTER U [2000] +0x86D4 U+24E5 # CIRCLED LATIN SMALL LETTER V [2000] +0x86D5 U+24E6 # CIRCLED LATIN SMALL LETTER W [2000] +0x86D6 U+24E7 # CIRCLED LATIN SMALL LETTER X [2000] +0x86D7 U+24E8 # CIRCLED LATIN SMALL LETTER Y [2000] +0x86D8 U+24E9 # CIRCLED LATIN SMALL LETTER Z [2000] +0x86D9 U+32D0 # CIRCLED KATAKANA A [2000] +0x86DA U+32D1 # CIRCLED KATAKANA I [2000] +0x86DB U+32D2 # CIRCLED KATAKANA U [2000] +0x86DC U+32D3 # CIRCLED KATAKANA E [2000] +0x86DD U+32D4 # CIRCLED KATAKANA O [2000] +0x86DE U+32D5 # CIRCLED KATAKANA KA [2000] +0x86DF U+32D6 # CIRCLED KATAKANA KI [2000] +0x86E0 U+32D7 # CIRCLED KATAKANA KU [2000] +0x86E1 U+32D8 # CIRCLED KATAKANA KE [2000] +0x86E2 U+32D9 # CIRCLED KATAKANA KO [2000] +0x86E3 U+32DA # CIRCLED KATAKANA SA [2000] +0x86E4 U+32DB # CIRCLED KATAKANA SI [2000] +0x86E5 U+32DC # CIRCLED KATAKANA SU [2000] +0x86E6 U+32DD # CIRCLED KATAKANA SE [2000] +0x86E7 U+32DE # CIRCLED KATAKANA SO [2000] +0x86E8 U+32DF # CIRCLED KATAKANA TA [2000] +0x86E9 U+32E0 # CIRCLED KATAKANA TI [2000] +0x86EA U+32E1 # CIRCLED KATAKANA TU [2000] +0x86EB U+32E2 # CIRCLED KATAKANA TE [2000] +0x86EC U+32E3 # CIRCLED KATAKANA TO [2000] +0x86ED U+32FA # CIRCLED KATAKANA RO [2000] +0x86EE U+32E9 # CIRCLED KATAKANA HA [2000] +0x86EF U+32E5 # CIRCLED KATAKANA NI [2000] +0x86F0 U+32ED # CIRCLED KATAKANA HO [2000] +0x86F1 U+32EC # CIRCLED KATAKANA HE [2000] +0x86F2 # <reserved> +0x86F3 # <reserved> +0x86F4 # <reserved> +0x86F5 # <reserved> +0x86F6 # <reserved> +0x86F7 # <reserved> +0x86F8 # <reserved> +0x86F9 # <reserved> +0x86FA # <reserved> +0x86FB U+2051 # TWO ASTERISKS ALIGNED VERTICALLY [2000] [Unicode3.2] +0x86FC U+2042 # ASTERISM [2000] +0x8740 U+2460 # CIRCLED DIGIT ONE [2000] +0x8741 U+2461 # CIRCLED DIGIT TWO [2000] +0x8742 U+2462 # CIRCLED DIGIT THREE [2000] +0x8743 U+2463 # CIRCLED DIGIT FOUR [2000] +0x8744 U+2464 # CIRCLED DIGIT FIVE [2000] +0x8745 U+2465 # CIRCLED DIGIT SIX [2000] +0x8746 U+2466 # CIRCLED DIGIT SEVEN [2000] +0x8747 U+2467 # CIRCLED DIGIT EIGHT [2000] +0x8748 U+2468 # CIRCLED DIGIT NINE [2000] +0x8749 U+2469 # CIRCLED NUMBER TEN [2000] +0x874A U+246A # CIRCLED NUMBER ELEVEN [2000] +0x874B U+246B # CIRCLED NUMBER TWELVE [2000] +0x874C U+246C # CIRCLED NUMBER THIRTEEN [2000] +0x874D U+246D # CIRCLED NUMBER FOURTEEN [2000] +0x874E U+246E # CIRCLED NUMBER FIFTEEN [2000] +0x874F U+246F # CIRCLED NUMBER SIXTEEN [2000] +0x8750 U+2470 # CIRCLED NUMBER SEVENTEEN [2000] +0x8751 U+2471 # CIRCLED NUMBER EIGHTEEN [2000] +0x8752 U+2472 # CIRCLED NUMBER NINETEEN [2000] +0x8753 U+2473 # CIRCLED NUMBER TWENTY [2000] +0x8754 U+2160 # ROMAN NUMERAL ONE [2000] +0x8755 U+2161 # ROMAN NUMERAL TWO [2000] +0x8756 U+2162 # ROMAN NUMERAL THREE [2000] +0x8757 U+2163 # ROMAN NUMERAL FOUR [2000] +0x8758 U+2164 # ROMAN NUMERAL FIVE [2000] +0x8759 U+2165 # ROMAN NUMERAL SIX [2000] +0x875A U+2166 # ROMAN NUMERAL SEVEN [2000] +0x875B U+2167 # ROMAN NUMERAL EIGHT [2000] +0x875C U+2168 # ROMAN NUMERAL NINE [2000] +0x875D U+2169 # ROMAN NUMERAL TEN [2000] +0x875E U+216A # ROMAN NUMERAL ELEVEN [2000] +0x875F U+3349 # SQUARE MIRI [2000] +0x8760 U+3314 # SQUARE KIRO [2000] +0x8761 U+3322 # SQUARE SENTI [2000] +0x8762 U+334D # SQUARE MEETORU [2000] +0x8763 U+3318 # SQUARE GURAMU [2000] +0x8764 U+3327 # SQUARE TON [2000] +0x8765 U+3303 # SQUARE AARU [2000] +0x8766 U+3336 # SQUARE HEKUTAARU [2000] +0x8767 U+3351 # SQUARE RITTORU [2000] +0x8768 U+3357 # SQUARE WATTO [2000] +0x8769 U+330D # SQUARE KARORII [2000] +0x876A U+3326 # SQUARE DORU [2000] +0x876B U+3323 # SQUARE SENTO [2000] +0x876C U+332B # SQUARE PAASENTO [2000] +0x876D U+334A # SQUARE MIRIBAARU [2000] +0x876E U+333B # SQUARE PEEZI [2000] +0x876F U+339C # SQUARE MM [2000] +0x8770 U+339D # SQUARE CM [2000] +0x8771 U+339E # SQUARE KM [2000] +0x8772 U+338E # SQUARE MG [2000] +0x8773 U+338F # SQUARE KG [2000] +0x8774 U+33C4 # SQUARE CC [2000] +0x8775 U+33A1 # SQUARE M SQUARED [2000] +0x8776 U+216B # ROMAN NUMERAL TWELVE [2000] +0x8777 # <reserved> +0x8778 # <reserved> +0x8779 # <reserved> +0x877A # <reserved> +0x877B # <reserved> +0x877C # <reserved> +0x877D # <reserved> +0x877E U+337B # SQUARE ERA NAME HEISEI [2000] +0x8780 U+301D # REVERSED DOUBLE PRIME QUOTATION MARK [2000] +0x8781 U+301F # LOW DOUBLE PRIME QUOTATION MARK [2000] +0x8782 U+2116 # NUMERO SIGN [2000] +0x8783 U+33CD # SQUARE KK [2000] +0x8784 U+2121 # TELEPHONE SIGN [2000] +0x8785 U+32A4 # CIRCLED IDEOGRAPH HIGH [2000] +0x8786 U+32A5 # CIRCLED IDEOGRAPH CENTRE [2000] +0x8787 U+32A6 # CIRCLED IDEOGRAPH LOW [2000] +0x8788 U+32A7 # CIRCLED IDEOGRAPH LEFT [2000] +0x8789 U+32A8 # CIRCLED IDEOGRAPH RIGHT [2000] +0x878A U+3231 # PARENTHESIZED IDEOGRAPH STOCK [2000] +0x878B U+3232 # PARENTHESIZED IDEOGRAPH HAVE [2000] +0x878C U+3239 # PARENTHESIZED IDEOGRAPH REPRESENT [2000] +0x878D U+337E # SQUARE ERA NAME MEIZI [2000] +0x878E U+337D # SQUARE ERA NAME TAISYOU [2000] +0x878F U+337C # SQUARE ERA NAME SYOUWA [2000] +0x8790 # <reserved> Windows: U+2252 +0x8791 # <reserved> Windows: U+2261 +0x8792 # <reserved> Windows: U+222B +0x8793 U+222E # CONTOUR INTEGRAL [2000] +0x8794 # <reserved> Windows: U+2211 +0x8795 # <reserved> Windows: U+221A +0x8796 # <reserved> Windows: U+22A5 +0x8797 # <reserved> Windows: U+2220 +0x8798 U+221F # RIGHT ANGLE [2000] +0x8799 U+22BF # RIGHT TRIANGLE [2000] +0x879A # <reserved> Windows: U+2235 +0x879B # <reserved> Windows: U+2229 +0x879C # <reserved> Windows: U+222A +0x879D U+2756 # BLACK DIAMOND MINUS WHITE X [2000] +0x879E U+261E # WHITE RIGHT POINTING INDEX [2000] +0x879F U+4FF1 # <cjk> [2004] +0x87A0 U+2000B # <cjk> [2000] [Unicode3.1] +0x87A1 U+3402 # <cjk> [2000] +0x87A2 U+4E28 # <cjk> [2000] +0x87A3 U+4E2F # <cjk> [2000] +0x87A4 U+4E30 # <cjk> [2000] +0x87A5 U+4E8D # <cjk> [2000] +0x87A6 U+4EE1 # <cjk> [2000] +0x87A7 U+4EFD # <cjk> [2000] +0x87A8 U+4EFF # <cjk> [2000] +0x87A9 U+4F03 # <cjk> [2000] +0x87AA U+4F0B # <cjk> [2000] +0x87AB U+4F60 # <cjk> [2000] +0x87AC U+4F48 # <cjk> [2000] +0x87AD U+4F49 # <cjk> [2000] +0x87AE U+4F56 # <cjk> [2000] +0x87AF U+4F5F # <cjk> [2000] +0x87B0 U+4F6A # <cjk> [2000] +0x87B1 U+4F6C # <cjk> [2000] +0x87B2 U+4F7E # <cjk> [2000] +0x87B3 U+4F8A # <cjk> [2000] +0x87B4 U+4F94 # <cjk> [2000] +0x87B5 U+4F97 # <cjk> [2000] +0x87B6 U+FA30 # CJK COMPATIBILITY IDEOGRAPH-FA30 [2000] [Unicode3.2] +0x87B7 U+4FC9 # <cjk> [2000] +0x87B8 U+4FE0 # <cjk> [2000] +0x87B9 U+5001 # <cjk> [2000] +0x87BA U+5002 # <cjk> [2000] +0x87BB U+500E # <cjk> [2000] +0x87BC U+5018 # <cjk> [2000] +0x87BD U+5027 # <cjk> [2000] +0x87BE U+502E # <cjk> [2000] +0x87BF U+5040 # <cjk> [2000] +0x87C0 U+503B # <cjk> [2000] +0x87C1 U+5041 # <cjk> [2000] +0x87C2 U+5094 # <cjk> [2000] +0x87C3 U+50CC # <cjk> [2000] +0x87C4 U+50F2 # <cjk> [2000] +0x87C5 U+50D0 # <cjk> [2000] +0x87C6 U+50E6 # <cjk> [2000] +0x87C7 U+FA31 # CJK COMPATIBILITY IDEOGRAPH-FA31 [2000] [Unicode3.2] +0x87C8 U+5106 # <cjk> [2000] +0x87C9 U+5103 # <cjk> [2000] +0x87CA U+510B # <cjk> [2000] +0x87CB U+511E # <cjk> [2000] +0x87CC U+5135 # <cjk> [2000] +0x87CD U+514A # <cjk> [2000] +0x87CE U+FA32 # CJK COMPATIBILITY IDEOGRAPH-FA32 [2000] [Unicode3.2] +0x87CF U+5155 # <cjk> [2000] +0x87D0 U+5157 # <cjk> [2000] +0x87D1 U+34B5 # <cjk> [2000] +0x87D2 U+519D # <cjk> [2000] +0x87D3 U+51C3 # <cjk> [2000] +0x87D4 U+51CA # <cjk> [2000] +0x87D5 U+51DE # <cjk> [2000] +0x87D6 U+51E2 # <cjk> [2000] +0x87D7 U+51EE # <cjk> [2000] +0x87D8 U+5201 # <cjk> [2000] +0x87D9 U+34DB # <cjk> [2000] +0x87DA U+5213 # <cjk> [2000] +0x87DB U+5215 # <cjk> [2000] +0x87DC U+5249 # <cjk> [2000] +0x87DD U+5257 # <cjk> [2000] +0x87DE U+5261 # <cjk> [2000] +0x87DF U+5293 # <cjk> [2000] +0x87E0 U+52C8 # <cjk> [2000] +0x87E1 U+FA33 # CJK COMPATIBILITY IDEOGRAPH-FA33 [2000] [Unicode3.2] +0x87E2 U+52CC # <cjk> [2000] +0x87E3 U+52D0 # <cjk> [2000] +0x87E4 U+52D6 # <cjk> [2000] +0x87E5 U+52DB # <cjk> [2000] +0x87E6 U+FA34 # CJK COMPATIBILITY IDEOGRAPH-FA34 [2000] [Unicode3.2] +0x87E7 U+52F0 # <cjk> [2000] +0x87E8 U+52FB # <cjk> [2000] +0x87E9 U+5300 # <cjk> [2000] +0x87EA U+5307 # <cjk> [2000] +0x87EB U+531C # <cjk> [2000] +0x87EC U+FA35 # CJK COMPATIBILITY IDEOGRAPH-FA35 [2000] [Unicode3.2] +0x87ED U+5361 # <cjk> [2000] +0x87EE U+5363 # <cjk> [2000] +0x87EF U+537D # <cjk> [2000] +0x87F0 U+5393 # <cjk> [2000] +0x87F1 U+539D # <cjk> [2000] +0x87F2 U+53B2 # <cjk> [2000] +0x87F3 U+5412 # <cjk> [2000] +0x87F4 U+5427 # <cjk> [2000] +0x87F5 U+544D # <cjk> [2000] +0x87F6 U+549C # <cjk> [2000] +0x87F7 U+546B # <cjk> [2000] +0x87F8 U+5474 # <cjk> [2000] +0x87F9 U+547F # <cjk> [2000] +0x87FA U+5488 # <cjk> [2000] +0x87FB U+5496 # <cjk> [2000] +0x87FC U+54A1 # <cjk> [2000] +0x8840 U+54A9 # <cjk> [2000] +0x8841 U+54C6 # <cjk> [2000] +0x8842 U+54FF # <cjk> [2000] +0x8843 U+550E # <cjk> [2000] +0x8844 U+552B # <cjk> [2000] +0x8845 U+5535 # <cjk> [2000] +0x8846 U+5550 # <cjk> [2000] +0x8847 U+555E # <cjk> [2000] +0x8848 U+5581 # <cjk> [2000] +0x8849 U+5586 # <cjk> [2000] +0x884A U+558E # <cjk> [2000] +0x884B U+FA36 # CJK COMPATIBILITY IDEOGRAPH-FA36 [2000] [Unicode3.2] +0x884C U+55AD # <cjk> [2000] +0x884D U+55CE # <cjk> [2000] +0x884E U+FA37 # CJK COMPATIBILITY IDEOGRAPH-FA37 [2000] [Unicode3.2] +0x884F U+5608 # <cjk> [2000] +0x8850 U+560E # <cjk> [2000] +0x8851 U+563B # <cjk> [2000] +0x8852 U+5649 # <cjk> [2000] +0x8853 U+5676 # <cjk> [2000] +0x8854 U+5666 # <cjk> [2000] +0x8855 U+FA38 # CJK COMPATIBILITY IDEOGRAPH-FA38 [2000] [Unicode3.2] +0x8856 U+566F # <cjk> [2000] +0x8857 U+5671 # <cjk> [2000] +0x8858 U+5672 # <cjk> [2000] +0x8859 U+5699 # <cjk> [2000] +0x885A U+569E # <cjk> [2000] +0x885B U+56A9 # <cjk> [2000] +0x885C U+56AC # <cjk> [2000] +0x885D U+56B3 # <cjk> [2000] +0x885E U+56C9 # <cjk> [2000] +0x885F U+56CA # <cjk> [2000] +0x8860 U+570A # <cjk> [2000] +0x8861 U+2123D # <cjk> [2000] [Unicode3.1] +0x8862 U+5721 # <cjk> [2000] +0x8863 U+572F # <cjk> [2000] +0x8864 U+5733 # <cjk> [2000] +0x8865 U+5734 # <cjk> [2000] +0x8866 U+5770 # <cjk> [2000] +0x8867 U+5777 # <cjk> [2000] +0x8868 U+577C # <cjk> [2000] +0x8869 U+579C # <cjk> [2000] +0x886A U+FA0F # CJK COMPATIBILITY IDEOGRAPH-FA0F [2000] +0x886B U+2131B # <cjk> [2000] [Unicode3.1] +0x886C U+57B8 # <cjk> [2000] +0x886D U+57C7 # <cjk> [2000] +0x886E U+57C8 # <cjk> [2000] +0x886F U+57CF # <cjk> [2000] +0x8870 U+57E4 # <cjk> [2000] +0x8871 U+57ED # <cjk> [2000] +0x8872 U+57F5 # <cjk> [2000] +0x8873 U+57F6 # <cjk> [2000] +0x8874 U+57FF # <cjk> [2000] +0x8875 U+5809 # <cjk> [2000] +0x8876 U+FA10 # CJK COMPATIBILITY IDEOGRAPH-FA10 [2000] +0x8877 U+5861 # <cjk> [2000] +0x8878 U+5864 # <cjk> [2000] +0x8879 U+FA39 # CJK COMPATIBILITY IDEOGRAPH-FA39 [2000] [Unicode3.2] +0x887A U+587C # <cjk> [2000] +0x887B U+5889 # <cjk> [2000] +0x887C U+589E # <cjk> [2000] +0x887D U+FA3A # CJK COMPATIBILITY IDEOGRAPH-FA3A [2000] [Unicode3.2] +0x887E U+58A9 # <cjk> [2000] +0x8880 U+2146E # <cjk> [2000] [Unicode3.1] +0x8881 U+58D2 # <cjk> [2000] +0x8882 U+58CE # <cjk> [2000] +0x8883 U+58D4 # <cjk> [2000] +0x8884 U+58DA # <cjk> [2000] +0x8885 U+58E0 # <cjk> [2000] +0x8886 U+58E9 # <cjk> [2000] +0x8887 U+590C # <cjk> [2000] +0x8888 U+8641 # <cjk> [2000] +0x8889 U+595D # <cjk> [2000] +0x888A U+596D # <cjk> [2000] +0x888B U+598B # <cjk> [2000] +0x888C U+5992 # <cjk> [2000] +0x888D U+59A4 # <cjk> [2000] +0x888E U+59C3 # <cjk> [2000] +0x888F U+59D2 # <cjk> [2000] +0x8890 U+59DD # <cjk> [2000] +0x8891 U+5A13 # <cjk> [2000] +0x8892 U+5A23 # <cjk> [2000] +0x8893 U+5A67 # <cjk> [2000] +0x8894 U+5A6D # <cjk> [2000] +0x8895 U+5A77 # <cjk> [2000] +0x8896 U+5A7E # <cjk> [2000] +0x8897 U+5A84 # <cjk> [2000] +0x8898 U+5A9E # <cjk> [2000] +0x8899 U+5AA7 # <cjk> [2000] +0x889A U+5AC4 # <cjk> [2000] +0x889B U+218BD # <cjk> [2000] [Unicode3.1] +0x889C U+5B19 # <cjk> [2000] +0x889D U+5B25 # <cjk> [2000] +0x889E U+525D # <cjk> [2004] +0x889F U+4E9C # <cjk> +0x88A0 U+5516 # <cjk> +0x88A1 U+5A03 # <cjk> +0x88A2 U+963F # <cjk> +0x88A3 U+54C0 # <cjk> +0x88A4 U+611B # <cjk> +0x88A5 U+6328 # <cjk> +0x88A6 U+59F6 # <cjk> +0x88A7 U+9022 # <cjk> +0x88A8 U+8475 # <cjk> +0x88A9 U+831C # <cjk> +0x88AA U+7A50 # <cjk> +0x88AB U+60AA # <cjk> +0x88AC U+63E1 # <cjk> +0x88AD U+6E25 # <cjk> +0x88AE U+65ED # <cjk> +0x88AF U+8466 # <cjk> +0x88B0 U+82A6 # <cjk> +0x88B1 U+9BF5 # <cjk> +0x88B2 U+6893 # <cjk> +0x88B3 U+5727 # <cjk> +0x88B4 U+65A1 # <cjk> +0x88B5 U+6271 # <cjk> +0x88B6 U+5B9B # <cjk> +0x88B7 U+59D0 # <cjk> +0x88B8 U+867B # <cjk> +0x88B9 U+98F4 # <cjk> +0x88BA U+7D62 # <cjk> +0x88BB U+7DBE # <cjk> +0x88BC U+9B8E # <cjk> +0x88BD U+6216 # <cjk> +0x88BE U+7C9F # <cjk> +0x88BF U+88B7 # <cjk> +0x88C0 U+5B89 # <cjk> +0x88C1 U+5EB5 # <cjk> +0x88C2 U+6309 # <cjk> +0x88C3 U+6697 # <cjk> +0x88C4 U+6848 # <cjk> +0x88C5 U+95C7 # <cjk> +0x88C6 U+978D # <cjk> +0x88C7 U+674F # <cjk> +0x88C8 U+4EE5 # <cjk> +0x88C9 U+4F0A # <cjk> +0x88CA U+4F4D # <cjk> +0x88CB U+4F9D # <cjk> +0x88CC U+5049 # <cjk> +0x88CD U+56F2 # <cjk> +0x88CE U+5937 # <cjk> +0x88CF U+59D4 # <cjk> +0x88D0 U+5A01 # <cjk> +0x88D1 U+5C09 # <cjk> +0x88D2 U+60DF # <cjk> +0x88D3 U+610F # <cjk> +0x88D4 U+6170 # <cjk> +0x88D5 U+6613 # <cjk> +0x88D6 U+6905 # <cjk> +0x88D7 U+70BA # <cjk> +0x88D8 U+754F # <cjk> +0x88D9 U+7570 # <cjk> +0x88DA U+79FB # <cjk> +0x88DB U+7DAD # <cjk> +0x88DC U+7DEF # <cjk> +0x88DD U+80C3 # <cjk> +0x88DE U+840E # <cjk> +0x88DF U+8863 # <cjk> +0x88E0 U+8B02 # <cjk> +0x88E1 U+9055 # <cjk> +0x88E2 U+907A # <cjk> +0x88E3 U+533B # <cjk> +0x88E4 U+4E95 # <cjk> +0x88E5 U+4EA5 # <cjk> +0x88E6 U+57DF # <cjk> +0x88E7 U+80B2 # <cjk> +0x88E8 U+90C1 # <cjk> +0x88E9 U+78EF # <cjk> +0x88EA U+4E00 # <cjk> +0x88EB U+58F1 # <cjk> +0x88EC U+6EA2 # <cjk> +0x88ED U+9038 # <cjk> +0x88EE U+7A32 # <cjk> +0x88EF U+8328 # <cjk> +0x88F0 U+828B # <cjk> +0x88F1 U+9C2F # <cjk> +0x88F2 U+5141 # <cjk> +0x88F3 U+5370 # <cjk> +0x88F4 U+54BD # <cjk> +0x88F5 U+54E1 # <cjk> +0x88F6 U+56E0 # <cjk> +0x88F7 U+59FB # <cjk> +0x88F8 U+5F15 # <cjk> +0x88F9 U+98F2 # <cjk> +0x88FA U+6DEB # <cjk> +0x88FB U+80E4 # <cjk> +0x88FC U+852D # <cjk> +0x8940 U+9662 # <cjk> +0x8941 U+9670 # <cjk> +0x8942 U+96A0 # <cjk> +0x8943 U+97FB # <cjk> +0x8944 U+540B # <cjk> +0x8945 U+53F3 # <cjk> +0x8946 U+5B87 # <cjk> +0x8947 U+70CF # <cjk> +0x8948 U+7FBD # <cjk> +0x8949 U+8FC2 # <cjk> +0x894A U+96E8 # <cjk> +0x894B U+536F # <cjk> +0x894C U+9D5C # <cjk> +0x894D U+7ABA # <cjk> +0x894E U+4E11 # <cjk> +0x894F U+7893 # <cjk> +0x8950 U+81FC # <cjk> +0x8951 U+6E26 # <cjk> +0x8952 U+5618 # <cjk> +0x8953 U+5504 # <cjk> +0x8954 U+6B1D # <cjk> +0x8955 U+851A # <cjk> +0x8956 U+9C3B # <cjk> +0x8957 U+59E5 # <cjk> +0x8958 U+53A9 # <cjk> +0x8959 U+6D66 # <cjk> +0x895A U+74DC # <cjk> +0x895B U+958F # <cjk> +0x895C U+5642 # <cjk> +0x895D U+4E91 # <cjk> +0x895E U+904B # <cjk> +0x895F U+96F2 # <cjk> +0x8960 U+834F # <cjk> +0x8961 U+990C # <cjk> +0x8962 U+53E1 # <cjk> +0x8963 U+55B6 # <cjk> +0x8964 U+5B30 # <cjk> +0x8965 U+5F71 # <cjk> +0x8966 U+6620 # <cjk> +0x8967 U+66F3 # <cjk> +0x8968 U+6804 # <cjk> +0x8969 U+6C38 # <cjk> +0x896A U+6CF3 # <cjk> +0x896B U+6D29 # <cjk> +0x896C U+745B # <cjk> +0x896D U+76C8 # <cjk> +0x896E U+7A4E # <cjk> +0x896F U+9834 # <cjk> +0x8970 U+82F1 # <cjk> +0x8971 U+885B # <cjk> +0x8972 U+8A60 # <cjk> +0x8973 U+92ED # <cjk> +0x8974 U+6DB2 # <cjk> +0x8975 U+75AB # <cjk> +0x8976 U+76CA # <cjk> +0x8977 U+99C5 # <cjk> +0x8978 U+60A6 # <cjk> +0x8979 U+8B01 # <cjk> +0x897A U+8D8A # <cjk> +0x897B U+95B2 # <cjk> +0x897C U+698E # <cjk> +0x897D U+53AD # <cjk> +0x897E U+5186 # <cjk> +0x8980 U+5712 # <cjk> +0x8981 U+5830 # <cjk> +0x8982 U+5944 # <cjk> +0x8983 U+5BB4 # <cjk> +0x8984 U+5EF6 # <cjk> +0x8985 U+6028 # <cjk> +0x8986 U+63A9 # <cjk> +0x8987 U+63F4 # <cjk> +0x8988 U+6CBF # <cjk> +0x8989 U+6F14 # <cjk> +0x898A U+708E # <cjk> +0x898B U+7114 # <cjk> +0x898C U+7159 # <cjk> +0x898D U+71D5 # <cjk> +0x898E U+733F # <cjk> +0x898F U+7E01 # <cjk> +0x8990 U+8276 # <cjk> +0x8991 U+82D1 # <cjk> +0x8992 U+8597 # <cjk> +0x8993 U+9060 # <cjk> +0x8994 U+925B # <cjk> +0x8995 U+9D1B # <cjk> +0x8996 U+5869 # <cjk> +0x8997 U+65BC # <cjk> +0x8998 U+6C5A # <cjk> +0x8999 U+7525 # <cjk> +0x899A U+51F9 # <cjk> +0x899B U+592E # <cjk> +0x899C U+5965 # <cjk> +0x899D U+5F80 # <cjk> +0x899E U+5FDC # <cjk> +0x899F U+62BC # <cjk> +0x89A0 U+65FA # <cjk> +0x89A1 U+6A2A # <cjk> +0x89A2 U+6B27 # <cjk> +0x89A3 U+6BB4 # <cjk> +0x89A4 U+738B # <cjk> +0x89A5 U+7FC1 # <cjk> +0x89A6 U+8956 # <cjk> +0x89A7 U+9D2C # <cjk> +0x89A8 U+9D0E # <cjk> +0x89A9 U+9EC4 # <cjk> +0x89AA U+5CA1 # <cjk> +0x89AB U+6C96 # <cjk> +0x89AC U+837B # <cjk> +0x89AD U+5104 # <cjk> +0x89AE U+5C4B # <cjk> +0x89AF U+61B6 # <cjk> +0x89B0 U+81C6 # <cjk> +0x89B1 U+6876 # <cjk> +0x89B2 U+7261 # <cjk> +0x89B3 U+4E59 # <cjk> +0x89B4 U+4FFA # <cjk> +0x89B5 U+5378 # <cjk> +0x89B6 U+6069 # <cjk> +0x89B7 U+6E29 # <cjk> +0x89B8 U+7A4F # <cjk> +0x89B9 U+97F3 # <cjk> +0x89BA U+4E0B # <cjk> +0x89BB U+5316 # <cjk> +0x89BC U+4EEE # <cjk> +0x89BD U+4F55 # <cjk> +0x89BE U+4F3D # <cjk> +0x89BF U+4FA1 # <cjk> +0x89C0 U+4F73 # <cjk> +0x89C1 U+52A0 # <cjk> +0x89C2 U+53EF # <cjk> +0x89C3 U+5609 # <cjk> +0x89C4 U+590F # <cjk> +0x89C5 U+5AC1 # <cjk> +0x89C6 U+5BB6 # <cjk> +0x89C7 U+5BE1 # <cjk> +0x89C8 U+79D1 # <cjk> +0x89C9 U+6687 # <cjk> +0x89CA U+679C # <cjk> +0x89CB U+67B6 # <cjk> +0x89CC U+6B4C # <cjk> +0x89CD U+6CB3 # <cjk> +0x89CE U+706B # <cjk> +0x89CF U+73C2 # <cjk> +0x89D0 U+798D # <cjk> +0x89D1 U+79BE # <cjk> +0x89D2 U+7A3C # <cjk> +0x89D3 U+7B87 # <cjk> +0x89D4 U+82B1 # <cjk> +0x89D5 U+82DB # <cjk> +0x89D6 U+8304 # <cjk> +0x89D7 U+8377 # <cjk> +0x89D8 U+83EF # <cjk> +0x89D9 U+83D3 # <cjk> +0x89DA U+8766 # <cjk> +0x89DB U+8AB2 # <cjk> +0x89DC U+5629 # <cjk> +0x89DD U+8CA8 # <cjk> +0x89DE U+8FE6 # <cjk> +0x89DF U+904E # <cjk> +0x89E0 U+971E # <cjk> +0x89E1 U+868A # <cjk> +0x89E2 U+4FC4 # <cjk> +0x89E3 U+5CE8 # <cjk> +0x89E4 U+6211 # <cjk> +0x89E5 U+7259 # <cjk> +0x89E6 U+753B # <cjk> +0x89E7 U+81E5 # <cjk> +0x89E8 U+82BD # <cjk> +0x89E9 U+86FE # <cjk> +0x89EA U+8CC0 # <cjk> +0x89EB U+96C5 # <cjk> +0x89EC U+9913 # <cjk> +0x89ED U+99D5 # <cjk> +0x89EE U+4ECB # <cjk> +0x89EF U+4F1A # <cjk> +0x89F0 U+89E3 # <cjk> +0x89F1 U+56DE # <cjk> +0x89F2 U+584A # <cjk> +0x89F3 U+58CA # <cjk> +0x89F4 U+5EFB # <cjk> +0x89F5 U+5FEB # <cjk> +0x89F6 U+602A # <cjk> +0x89F7 U+6094 # <cjk> +0x89F8 U+6062 # <cjk> +0x89F9 U+61D0 # <cjk> +0x89FA U+6212 # <cjk> +0x89FB U+62D0 # <cjk> +0x89FC U+6539 # <cjk> +0x8A40 U+9B41 # <cjk> +0x8A41 U+6666 # <cjk> +0x8A42 U+68B0 # <cjk> +0x8A43 U+6D77 # <cjk> +0x8A44 U+7070 # <cjk> +0x8A45 U+754C # <cjk> +0x8A46 U+7686 # <cjk> +0x8A47 U+7D75 # <cjk> +0x8A48 U+82A5 # <cjk> +0x8A49 U+87F9 # <cjk> +0x8A4A U+958B # <cjk> +0x8A4B U+968E # <cjk> +0x8A4C U+8C9D # <cjk> +0x8A4D U+51F1 # <cjk> +0x8A4E U+52BE # <cjk> +0x8A4F U+5916 # <cjk> +0x8A50 U+54B3 # <cjk> +0x8A51 U+5BB3 # <cjk> +0x8A52 U+5D16 # <cjk> +0x8A53 U+6168 # <cjk> +0x8A54 U+6982 # <cjk> +0x8A55 U+6DAF # <cjk> +0x8A56 U+788D # <cjk> +0x8A57 U+84CB # <cjk> +0x8A58 U+8857 # <cjk> +0x8A59 U+8A72 # <cjk> +0x8A5A U+93A7 # <cjk> +0x8A5B U+9AB8 # <cjk> +0x8A5C U+6D6C # <cjk> +0x8A5D U+99A8 # <cjk> +0x8A5E U+86D9 # <cjk> +0x8A5F U+57A3 # <cjk> +0x8A60 U+67FF # <cjk> +0x8A61 U+86CE # <cjk> +0x8A62 U+920E # <cjk> +0x8A63 U+5283 # <cjk> +0x8A64 U+5687 # <cjk> +0x8A65 U+5404 # <cjk> +0x8A66 U+5ED3 # <cjk> +0x8A67 U+62E1 # <cjk> +0x8A68 U+64B9 # <cjk> +0x8A69 U+683C # <cjk> +0x8A6A U+6838 # <cjk> +0x8A6B U+6BBB # <cjk> +0x8A6C U+7372 # <cjk> +0x8A6D U+78BA # <cjk> +0x8A6E U+7A6B # <cjk> +0x8A6F U+899A # <cjk> +0x8A70 U+89D2 # <cjk> +0x8A71 U+8D6B # <cjk> +0x8A72 U+8F03 # <cjk> +0x8A73 U+90ED # <cjk> +0x8A74 U+95A3 # <cjk> +0x8A75 U+9694 # <cjk> +0x8A76 U+9769 # <cjk> +0x8A77 U+5B66 # <cjk> +0x8A78 U+5CB3 # <cjk> +0x8A79 U+697D # <cjk> +0x8A7A U+984D # <cjk> +0x8A7B U+984E # <cjk> +0x8A7C U+639B # <cjk> +0x8A7D U+7B20 # <cjk> +0x8A7E U+6A2B # <cjk> +0x8A80 U+6A7F # <cjk> +0x8A81 U+68B6 # <cjk> +0x8A82 U+9C0D # <cjk> +0x8A83 U+6F5F # <cjk> +0x8A84 U+5272 # <cjk> +0x8A85 U+559D # <cjk> +0x8A86 U+6070 # <cjk> +0x8A87 U+62EC # <cjk> +0x8A88 U+6D3B # <cjk> +0x8A89 U+6E07 # <cjk> +0x8A8A U+6ED1 # <cjk> +0x8A8B U+845B # <cjk> +0x8A8C U+8910 # <cjk> +0x8A8D U+8F44 # <cjk> +0x8A8E U+4E14 # <cjk> +0x8A8F U+9C39 # <cjk> +0x8A90 U+53F6 # <cjk> +0x8A91 U+691B # <cjk> +0x8A92 U+6A3A # <cjk> +0x8A93 U+9784 # <cjk> +0x8A94 U+682A # <cjk> +0x8A95 U+515C # <cjk> +0x8A96 U+7AC3 # <cjk> +0x8A97 U+84B2 # <cjk> +0x8A98 U+91DC # <cjk> +0x8A99 U+938C # <cjk> +0x8A9A U+565B # <cjk> +0x8A9B U+9D28 # <cjk> +0x8A9C U+6822 # <cjk> +0x8A9D U+8305 # <cjk> +0x8A9E U+8431 # <cjk> +0x8A9F U+7CA5 # <cjk> +0x8AA0 U+5208 # <cjk> +0x8AA1 U+82C5 # <cjk> +0x8AA2 U+74E6 # <cjk> +0x8AA3 U+4E7E # <cjk> +0x8AA4 U+4F83 # <cjk> +0x8AA5 U+51A0 # <cjk> +0x8AA6 U+5BD2 # <cjk> +0x8AA7 U+520A # <cjk> +0x8AA8 U+52D8 # <cjk> +0x8AA9 U+52E7 # <cjk> +0x8AAA U+5DFB # <cjk> +0x8AAB U+559A # <cjk> +0x8AAC U+582A # <cjk> +0x8AAD U+59E6 # <cjk> +0x8AAE U+5B8C # <cjk> +0x8AAF U+5B98 # <cjk> +0x8AB0 U+5BDB # <cjk> +0x8AB1 U+5E72 # <cjk> +0x8AB2 U+5E79 # <cjk> +0x8AB3 U+60A3 # <cjk> +0x8AB4 U+611F # <cjk> +0x8AB5 U+6163 # <cjk> +0x8AB6 U+61BE # <cjk> +0x8AB7 U+63DB # <cjk> +0x8AB8 U+6562 # <cjk> +0x8AB9 U+67D1 # <cjk> +0x8ABA U+6853 # <cjk> +0x8ABB U+68FA # <cjk> +0x8ABC U+6B3E # <cjk> +0x8ABD U+6B53 # <cjk> +0x8ABE U+6C57 # <cjk> +0x8ABF U+6F22 # <cjk> +0x8AC0 U+6F97 # <cjk> +0x8AC1 U+6F45 # <cjk> +0x8AC2 U+74B0 # <cjk> +0x8AC3 U+7518 # <cjk> +0x8AC4 U+76E3 # <cjk> +0x8AC5 U+770B # <cjk> +0x8AC6 U+7AFF # <cjk> +0x8AC7 U+7BA1 # <cjk> +0x8AC8 U+7C21 # <cjk> +0x8AC9 U+7DE9 # <cjk> +0x8ACA U+7F36 # <cjk> +0x8ACB U+7FF0 # <cjk> +0x8ACC U+809D # <cjk> +0x8ACD U+8266 # <cjk> +0x8ACE U+839E # <cjk> +0x8ACF U+89B3 # <cjk> +0x8AD0 U+8ACC # <cjk> +0x8AD1 U+8CAB # <cjk> +0x8AD2 U+9084 # <cjk> +0x8AD3 U+9451 # <cjk> +0x8AD4 U+9593 # <cjk> +0x8AD5 U+9591 # <cjk> +0x8AD6 U+95A2 # <cjk> +0x8AD7 U+9665 # <cjk> +0x8AD8 U+97D3 # <cjk> +0x8AD9 U+9928 # <cjk> +0x8ADA U+8218 # <cjk> +0x8ADB U+4E38 # <cjk> +0x8ADC U+542B # <cjk> +0x8ADD U+5CB8 # <cjk> +0x8ADE U+5DCC # <cjk> +0x8ADF U+73A9 # <cjk> +0x8AE0 U+764C # <cjk> +0x8AE1 U+773C # <cjk> +0x8AE2 U+5CA9 # <cjk> +0x8AE3 U+7FEB # <cjk> +0x8AE4 U+8D0B # <cjk> +0x8AE5 U+96C1 # <cjk> +0x8AE6 U+9811 # <cjk> +0x8AE7 U+9854 # <cjk> +0x8AE8 U+9858 # <cjk> +0x8AE9 U+4F01 # <cjk> +0x8AEA U+4F0E # <cjk> +0x8AEB U+5371 # <cjk> +0x8AEC U+559C # <cjk> +0x8AED U+5668 # <cjk> +0x8AEE U+57FA # <cjk> +0x8AEF U+5947 # <cjk> +0x8AF0 U+5B09 # <cjk> +0x8AF1 U+5BC4 # <cjk> +0x8AF2 U+5C90 # <cjk> +0x8AF3 U+5E0C # <cjk> +0x8AF4 U+5E7E # <cjk> +0x8AF5 U+5FCC # <cjk> +0x8AF6 U+63EE # <cjk> +0x8AF7 U+673A # <cjk> +0x8AF8 U+65D7 # <cjk> +0x8AF9 U+65E2 # <cjk> +0x8AFA U+671F # <cjk> +0x8AFB U+68CB # <cjk> +0x8AFC U+68C4 # <cjk> +0x8B40 U+6A5F # <cjk> +0x8B41 U+5E30 # <cjk> +0x8B42 U+6BC5 # <cjk> +0x8B43 U+6C17 # <cjk> +0x8B44 U+6C7D # <cjk> +0x8B45 U+757F # <cjk> +0x8B46 U+7948 # <cjk> +0x8B47 U+5B63 # <cjk> +0x8B48 U+7A00 # <cjk> +0x8B49 U+7D00 # <cjk> +0x8B4A U+5FBD # <cjk> +0x8B4B U+898F # <cjk> +0x8B4C U+8A18 # <cjk> +0x8B4D U+8CB4 # <cjk> +0x8B4E U+8D77 # <cjk> +0x8B4F U+8ECC # <cjk> +0x8B50 U+8F1D # <cjk> +0x8B51 U+98E2 # <cjk> +0x8B52 U+9A0E # <cjk> +0x8B53 U+9B3C # <cjk> +0x8B54 U+4E80 # <cjk> +0x8B55 U+507D # <cjk> +0x8B56 U+5100 # <cjk> +0x8B57 U+5993 # <cjk> +0x8B58 U+5B9C # <cjk> +0x8B59 U+622F # <cjk> +0x8B5A U+6280 # <cjk> +0x8B5B U+64EC # <cjk> +0x8B5C U+6B3A # <cjk> +0x8B5D U+72A0 # <cjk> +0x8B5E U+7591 # <cjk> +0x8B5F U+7947 # <cjk> +0x8B60 U+7FA9 # <cjk> +0x8B61 U+87FB # <cjk> +0x8B62 U+8ABC # <cjk> +0x8B63 U+8B70 # <cjk> +0x8B64 U+63AC # <cjk> +0x8B65 U+83CA # <cjk> +0x8B66 U+97A0 # <cjk> +0x8B67 U+5409 # <cjk> +0x8B68 U+5403 # <cjk> +0x8B69 U+55AB # <cjk> +0x8B6A U+6854 # <cjk> +0x8B6B U+6A58 # <cjk> +0x8B6C U+8A70 # <cjk> +0x8B6D U+7827 # <cjk> +0x8B6E U+6775 # <cjk> +0x8B6F U+9ECD # <cjk> +0x8B70 U+5374 # <cjk> +0x8B71 U+5BA2 # <cjk> +0x8B72 U+811A # <cjk> +0x8B73 U+8650 # <cjk> +0x8B74 U+9006 # <cjk> +0x8B75 U+4E18 # <cjk> +0x8B76 U+4E45 # <cjk> +0x8B77 U+4EC7 # <cjk> +0x8B78 U+4F11 # <cjk> +0x8B79 U+53CA # <cjk> +0x8B7A U+5438 # <cjk> +0x8B7B U+5BAE # <cjk> +0x8B7C U+5F13 # <cjk> +0x8B7D U+6025 # <cjk> +0x8B7E U+6551 # <cjk> +0x8B80 U+673D # <cjk> +0x8B81 U+6C42 # <cjk> +0x8B82 U+6C72 # <cjk> +0x8B83 U+6CE3 # <cjk> +0x8B84 U+7078 # <cjk> +0x8B85 U+7403 # <cjk> +0x8B86 U+7A76 # <cjk> +0x8B87 U+7AAE # <cjk> +0x8B88 U+7B08 # <cjk> +0x8B89 U+7D1A # <cjk> +0x8B8A U+7CFE # <cjk> +0x8B8B U+7D66 # <cjk> +0x8B8C U+65E7 # <cjk> +0x8B8D U+725B # <cjk> +0x8B8E U+53BB # <cjk> +0x8B8F U+5C45 # <cjk> +0x8B90 U+5DE8 # <cjk> +0x8B91 U+62D2 # <cjk> +0x8B92 U+62E0 # <cjk> +0x8B93 U+6319 # <cjk> +0x8B94 U+6E20 # <cjk> +0x8B95 U+865A # <cjk> +0x8B96 U+8A31 # <cjk> +0x8B97 U+8DDD # <cjk> +0x8B98 U+92F8 # <cjk> +0x8B99 U+6F01 # <cjk> +0x8B9A U+79A6 # <cjk> +0x8B9B U+9B5A # <cjk> +0x8B9C U+4EA8 # <cjk> +0x8B9D U+4EAB # <cjk> +0x8B9E U+4EAC # <cjk> +0x8B9F U+4F9B # <cjk> +0x8BA0 U+4FA0 # <cjk> +0x8BA1 U+50D1 # <cjk> +0x8BA2 U+5147 # <cjk> +0x8BA3 U+7AF6 # <cjk> +0x8BA4 U+5171 # <cjk> +0x8BA5 U+51F6 # <cjk> +0x8BA6 U+5354 # <cjk> +0x8BA7 U+5321 # <cjk> +0x8BA8 U+537F # <cjk> +0x8BA9 U+53EB # <cjk> +0x8BAA U+55AC # <cjk> +0x8BAB U+5883 # <cjk> +0x8BAC U+5CE1 # <cjk> +0x8BAD U+5F37 # <cjk> +0x8BAE U+5F4A # <cjk> +0x8BAF U+602F # <cjk> +0x8BB0 U+6050 # <cjk> +0x8BB1 U+606D # <cjk> +0x8BB2 U+631F # <cjk> +0x8BB3 U+6559 # <cjk> +0x8BB4 U+6A4B # <cjk> +0x8BB5 U+6CC1 # <cjk> +0x8BB6 U+72C2 # <cjk> +0x8BB7 U+72ED # <cjk> +0x8BB8 U+77EF # <cjk> +0x8BB9 U+80F8 # <cjk> +0x8BBA U+8105 # <cjk> +0x8BBB U+8208 # <cjk> +0x8BBC U+854E # <cjk> +0x8BBD U+90F7 # <cjk> +0x8BBE U+93E1 # <cjk> +0x8BBF U+97FF # <cjk> +0x8BC0 U+9957 # <cjk> +0x8BC1 U+9A5A # <cjk> +0x8BC2 U+4EF0 # <cjk> +0x8BC3 U+51DD # <cjk> +0x8BC4 U+5C2D # <cjk> +0x8BC5 U+6681 # <cjk> +0x8BC6 U+696D # <cjk> +0x8BC7 U+5C40 # <cjk> +0x8BC8 U+66F2 # <cjk> +0x8BC9 U+6975 # <cjk> +0x8BCA U+7389 # <cjk> +0x8BCB U+6850 # <cjk> +0x8BCC U+7C81 # <cjk> +0x8BCD U+50C5 # <cjk> +0x8BCE U+52E4 # <cjk> +0x8BCF U+5747 # <cjk> +0x8BD0 U+5DFE # <cjk> +0x8BD1 U+9326 # <cjk> +0x8BD2 U+65A4 # <cjk> +0x8BD3 U+6B23 # <cjk> +0x8BD4 U+6B3D # <cjk> +0x8BD5 U+7434 # <cjk> +0x8BD6 U+7981 # <cjk> +0x8BD7 U+79BD # <cjk> +0x8BD8 U+7B4B # <cjk> +0x8BD9 U+7DCA # <cjk> +0x8BDA U+82B9 # <cjk> +0x8BDB U+83CC # <cjk> +0x8BDC U+887F # <cjk> +0x8BDD U+895F # <cjk> +0x8BDE U+8B39 # <cjk> +0x8BDF U+8FD1 # <cjk> +0x8BE0 U+91D1 # <cjk> +0x8BE1 U+541F # <cjk> +0x8BE2 U+9280 # <cjk> +0x8BE3 U+4E5D # <cjk> +0x8BE4 U+5036 # <cjk> +0x8BE5 U+53E5 # <cjk> +0x8BE6 U+533A # <cjk> +0x8BE7 U+72D7 # <cjk> +0x8BE8 U+7396 # <cjk> +0x8BE9 U+77E9 # <cjk> +0x8BEA U+82E6 # <cjk> +0x8BEB U+8EAF # <cjk> +0x8BEC U+99C6 # <cjk> +0x8BED U+99C8 # <cjk> +0x8BEE U+99D2 # <cjk> +0x8BEF U+5177 # <cjk> +0x8BF0 U+611A # <cjk> +0x8BF1 U+865E # <cjk> +0x8BF2 U+55B0 # <cjk> +0x8BF3 U+7A7A # <cjk> +0x8BF4 U+5076 # <cjk> +0x8BF5 U+5BD3 # <cjk> +0x8BF6 U+9047 # <cjk> +0x8BF7 U+9685 # <cjk> +0x8BF8 U+4E32 # <cjk> +0x8BF9 U+6ADB # <cjk> +0x8BFA U+91E7 # <cjk> +0x8BFB U+5C51 # <cjk> +0x8BFC U+5C48 # <cjk> +0x8C40 U+6398 # <cjk> +0x8C41 U+7A9F # <cjk> +0x8C42 U+6C93 # <cjk> +0x8C43 U+9774 # <cjk> +0x8C44 U+8F61 # <cjk> +0x8C45 U+7AAA # <cjk> +0x8C46 U+718A # <cjk> +0x8C47 U+9688 # <cjk> +0x8C48 U+7C82 # <cjk> +0x8C49 U+6817 # <cjk> +0x8C4A U+7E70 # <cjk> +0x8C4B U+6851 # <cjk> +0x8C4C U+936C # <cjk> +0x8C4D U+52F2 # <cjk> +0x8C4E U+541B # <cjk> +0x8C4F U+85AB # <cjk> +0x8C50 U+8A13 # <cjk> +0x8C51 U+7FA4 # <cjk> +0x8C52 U+8ECD # <cjk> +0x8C53 U+90E1 # <cjk> +0x8C54 U+5366 # <cjk> +0x8C55 U+8888 # <cjk> +0x8C56 U+7941 # <cjk> +0x8C57 U+4FC2 # <cjk> +0x8C58 U+50BE # <cjk> +0x8C59 U+5211 # <cjk> +0x8C5A U+5144 # <cjk> +0x8C5B U+5553 # <cjk> +0x8C5C U+572D # <cjk> +0x8C5D U+73EA # <cjk> +0x8C5E U+578B # <cjk> +0x8C5F U+5951 # <cjk> +0x8C60 U+5F62 # <cjk> +0x8C61 U+5F84 # <cjk> +0x8C62 U+6075 # <cjk> +0x8C63 U+6176 # <cjk> +0x8C64 U+6167 # <cjk> +0x8C65 U+61A9 # <cjk> +0x8C66 U+63B2 # <cjk> +0x8C67 U+643A # <cjk> +0x8C68 U+656C # <cjk> +0x8C69 U+666F # <cjk> +0x8C6A U+6842 # <cjk> +0x8C6B U+6E13 # <cjk> +0x8C6C U+7566 # <cjk> +0x8C6D U+7A3D # <cjk> +0x8C6E U+7CFB # <cjk> +0x8C6F U+7D4C # <cjk> +0x8C70 U+7D99 # <cjk> +0x8C71 U+7E4B # <cjk> +0x8C72 U+7F6B # <cjk> +0x8C73 U+830E # <cjk> +0x8C74 U+834A # <cjk> +0x8C75 U+86CD # <cjk> +0x8C76 U+8A08 # <cjk> +0x8C77 U+8A63 # <cjk> +0x8C78 U+8B66 # <cjk> +0x8C79 U+8EFD # <cjk> +0x8C7A U+981A # <cjk> +0x8C7B U+9D8F # <cjk> +0x8C7C U+82B8 # <cjk> +0x8C7D U+8FCE # <cjk> +0x8C7E U+9BE8 # <cjk> +0x8C80 U+5287 # <cjk> +0x8C81 U+621F # <cjk> +0x8C82 U+6483 # <cjk> +0x8C83 U+6FC0 # <cjk> +0x8C84 U+9699 # <cjk> +0x8C85 U+6841 # <cjk> +0x8C86 U+5091 # <cjk> +0x8C87 U+6B20 # <cjk> +0x8C88 U+6C7A # <cjk> +0x8C89 U+6F54 # <cjk> +0x8C8A U+7A74 # <cjk> +0x8C8B U+7D50 # <cjk> +0x8C8C U+8840 # <cjk> +0x8C8D U+8A23 # <cjk> +0x8C8E U+6708 # <cjk> +0x8C8F U+4EF6 # <cjk> +0x8C90 U+5039 # <cjk> +0x8C91 U+5026 # <cjk> +0x8C92 U+5065 # <cjk> +0x8C93 U+517C # <cjk> +0x8C94 U+5238 # <cjk> +0x8C95 U+5263 # <cjk> +0x8C96 U+55A7 # <cjk> +0x8C97 U+570F # <cjk> +0x8C98 U+5805 # <cjk> +0x8C99 U+5ACC # <cjk> +0x8C9A U+5EFA # <cjk> +0x8C9B U+61B2 # <cjk> +0x8C9C U+61F8 # <cjk> +0x8C9D U+62F3 # <cjk> +0x8C9E U+6372 # <cjk> +0x8C9F U+691C # <cjk> +0x8CA0 U+6A29 # <cjk> +0x8CA1 U+727D # <cjk> +0x8CA2 U+72AC # <cjk> +0x8CA3 U+732E # <cjk> +0x8CA4 U+7814 # <cjk> +0x8CA5 U+786F # <cjk> +0x8CA6 U+7D79 # <cjk> +0x8CA7 U+770C # <cjk> +0x8CA8 U+80A9 # <cjk> +0x8CA9 U+898B # <cjk> +0x8CAA U+8B19 # <cjk> +0x8CAB U+8CE2 # <cjk> +0x8CAC U+8ED2 # <cjk> +0x8CAD U+9063 # <cjk> +0x8CAE U+9375 # <cjk> +0x8CAF U+967A # <cjk> +0x8CB0 U+9855 # <cjk> +0x8CB1 U+9A13 # <cjk> +0x8CB2 U+9E78 # <cjk> +0x8CB3 U+5143 # <cjk> +0x8CB4 U+539F # <cjk> +0x8CB5 U+53B3 # <cjk> +0x8CB6 U+5E7B # <cjk> +0x8CB7 U+5F26 # <cjk> +0x8CB8 U+6E1B # <cjk> +0x8CB9 U+6E90 # <cjk> +0x8CBA U+7384 # <cjk> +0x8CBB U+73FE # <cjk> +0x8CBC U+7D43 # <cjk> +0x8CBD U+8237 # <cjk> +0x8CBE U+8A00 # <cjk> +0x8CBF U+8AFA # <cjk> +0x8CC0 U+9650 # <cjk> +0x8CC1 U+4E4E # <cjk> +0x8CC2 U+500B # <cjk> +0x8CC3 U+53E4 # <cjk> +0x8CC4 U+547C # <cjk> +0x8CC5 U+56FA # <cjk> +0x8CC6 U+59D1 # <cjk> +0x8CC7 U+5B64 # <cjk> +0x8CC8 U+5DF1 # <cjk> +0x8CC9 U+5EAB # <cjk> +0x8CCA U+5F27 # <cjk> +0x8CCB U+6238 # <cjk> +0x8CCC U+6545 # <cjk> +0x8CCD U+67AF # <cjk> +0x8CCE U+6E56 # <cjk> +0x8CCF U+72D0 # <cjk> +0x8CD0 U+7CCA # <cjk> +0x8CD1 U+88B4 # <cjk> +0x8CD2 U+80A1 # <cjk> +0x8CD3 U+80E1 # <cjk> +0x8CD4 U+83F0 # <cjk> +0x8CD5 U+864E # <cjk> +0x8CD6 U+8A87 # <cjk> +0x8CD7 U+8DE8 # <cjk> +0x8CD8 U+9237 # <cjk> +0x8CD9 U+96C7 # <cjk> +0x8CDA U+9867 # <cjk> +0x8CDB U+9F13 # <cjk> +0x8CDC U+4E94 # <cjk> +0x8CDD U+4E92 # <cjk> +0x8CDE U+4F0D # <cjk> +0x8CDF U+5348 # <cjk> +0x8CE0 U+5449 # <cjk> +0x8CE1 U+543E # <cjk> +0x8CE2 U+5A2F # <cjk> +0x8CE3 U+5F8C # <cjk> +0x8CE4 U+5FA1 # <cjk> +0x8CE5 U+609F # <cjk> +0x8CE6 U+68A7 # <cjk> +0x8CE7 U+6A8E # <cjk> +0x8CE8 U+745A # <cjk> +0x8CE9 U+7881 # <cjk> +0x8CEA U+8A9E # <cjk> +0x8CEB U+8AA4 # <cjk> +0x8CEC U+8B77 # <cjk> +0x8CED U+9190 # <cjk> +0x8CEE U+4E5E # <cjk> +0x8CEF U+9BC9 # <cjk> +0x8CF0 U+4EA4 # <cjk> +0x8CF1 U+4F7C # <cjk> +0x8CF2 U+4FAF # <cjk> +0x8CF3 U+5019 # <cjk> +0x8CF4 U+5016 # <cjk> +0x8CF5 U+5149 # <cjk> +0x8CF6 U+516C # <cjk> +0x8CF7 U+529F # <cjk> +0x8CF8 U+52B9 # <cjk> +0x8CF9 U+52FE # <cjk> +0x8CFA U+539A # <cjk> +0x8CFB U+53E3 # <cjk> +0x8CFC U+5411 # <cjk> +0x8D40 U+540E # <cjk> +0x8D41 U+5589 # <cjk> +0x8D42 U+5751 # <cjk> +0x8D43 U+57A2 # <cjk> +0x8D44 U+597D # <cjk> +0x8D45 U+5B54 # <cjk> +0x8D46 U+5B5D # <cjk> +0x8D47 U+5B8F # <cjk> +0x8D48 U+5DE5 # <cjk> +0x8D49 U+5DE7 # <cjk> +0x8D4A U+5DF7 # <cjk> +0x8D4B U+5E78 # <cjk> +0x8D4C U+5E83 # <cjk> +0x8D4D U+5E9A # <cjk> +0x8D4E U+5EB7 # <cjk> +0x8D4F U+5F18 # <cjk> +0x8D50 U+6052 # <cjk> +0x8D51 U+614C # <cjk> +0x8D52 U+6297 # <cjk> +0x8D53 U+62D8 # <cjk> +0x8D54 U+63A7 # <cjk> +0x8D55 U+653B # <cjk> +0x8D56 U+6602 # <cjk> +0x8D57 U+6643 # <cjk> +0x8D58 U+66F4 # <cjk> +0x8D59 U+676D # <cjk> +0x8D5A U+6821 # <cjk> +0x8D5B U+6897 # <cjk> +0x8D5C U+69CB # <cjk> +0x8D5D U+6C5F # <cjk> +0x8D5E U+6D2A # <cjk> +0x8D5F U+6D69 # <cjk> +0x8D60 U+6E2F # <cjk> +0x8D61 U+6E9D # <cjk> +0x8D62 U+7532 # <cjk> +0x8D63 U+7687 # <cjk> +0x8D64 U+786C # <cjk> +0x8D65 U+7A3F # <cjk> +0x8D66 U+7CE0 # <cjk> +0x8D67 U+7D05 # <cjk> +0x8D68 U+7D18 # <cjk> +0x8D69 U+7D5E # <cjk> +0x8D6A U+7DB1 # <cjk> +0x8D6B U+8015 # <cjk> +0x8D6C U+8003 # <cjk> +0x8D6D U+80AF # <cjk> +0x8D6E U+80B1 # <cjk> +0x8D6F U+8154 # <cjk> +0x8D70 U+818F # <cjk> +0x8D71 U+822A # <cjk> +0x8D72 U+8352 # <cjk> +0x8D73 U+884C # <cjk> +0x8D74 U+8861 # <cjk> +0x8D75 U+8B1B # <cjk> +0x8D76 U+8CA2 # <cjk> +0x8D77 U+8CFC # <cjk> +0x8D78 U+90CA # <cjk> +0x8D79 U+9175 # <cjk> +0x8D7A U+9271 # <cjk> +0x8D7B U+783F # <cjk> +0x8D7C U+92FC # <cjk> +0x8D7D U+95A4 # <cjk> +0x8D7E U+964D # <cjk> +0x8D80 U+9805 # <cjk> +0x8D81 U+9999 # <cjk> +0x8D82 U+9AD8 # <cjk> +0x8D83 U+9D3B # <cjk> +0x8D84 U+525B # <cjk> +0x8D85 U+52AB # <cjk> +0x8D86 U+53F7 # <cjk> +0x8D87 U+5408 # <cjk> +0x8D88 U+58D5 # <cjk> +0x8D89 U+62F7 # <cjk> +0x8D8A U+6FE0 # <cjk> +0x8D8B U+8C6A # <cjk> +0x8D8C U+8F5F # <cjk> +0x8D8D U+9EB9 # <cjk> +0x8D8E U+514B # <cjk> +0x8D8F U+523B # <cjk> +0x8D90 U+544A # <cjk> +0x8D91 U+56FD # <cjk> +0x8D92 U+7A40 # <cjk> +0x8D93 U+9177 # <cjk> +0x8D94 U+9D60 # <cjk> +0x8D95 U+9ED2 # <cjk> +0x8D96 U+7344 # <cjk> +0x8D97 U+6F09 # <cjk> +0x8D98 U+8170 # <cjk> +0x8D99 U+7511 # <cjk> +0x8D9A U+5FFD # <cjk> +0x8D9B U+60DA # <cjk> +0x8D9C U+9AA8 # <cjk> +0x8D9D U+72DB # <cjk> +0x8D9E U+8FBC # <cjk> +0x8D9F U+6B64 # <cjk> +0x8DA0 U+9803 # <cjk> +0x8DA1 U+4ECA # <cjk> +0x8DA2 U+56F0 # <cjk> +0x8DA3 U+5764 # <cjk> +0x8DA4 U+58BE # <cjk> +0x8DA5 U+5A5A # <cjk> +0x8DA6 U+6068 # <cjk> +0x8DA7 U+61C7 # <cjk> +0x8DA8 U+660F # <cjk> +0x8DA9 U+6606 # <cjk> +0x8DAA U+6839 # <cjk> +0x8DAB U+68B1 # <cjk> +0x8DAC U+6DF7 # <cjk> +0x8DAD U+75D5 # <cjk> +0x8DAE U+7D3A # <cjk> +0x8DAF U+826E # <cjk> +0x8DB0 U+9B42 # <cjk> +0x8DB1 U+4E9B # <cjk> +0x8DB2 U+4F50 # <cjk> +0x8DB3 U+53C9 # <cjk> +0x8DB4 U+5506 # <cjk> +0x8DB5 U+5D6F # <cjk> +0x8DB6 U+5DE6 # <cjk> +0x8DB7 U+5DEE # <cjk> +0x8DB8 U+67FB # <cjk> +0x8DB9 U+6C99 # <cjk> +0x8DBA U+7473 # <cjk> +0x8DBB U+7802 # <cjk> +0x8DBC U+8A50 # <cjk> +0x8DBD U+9396 # <cjk> +0x8DBE U+88DF # <cjk> +0x8DBF U+5750 # <cjk> +0x8DC0 U+5EA7 # <cjk> +0x8DC1 U+632B # <cjk> +0x8DC2 U+50B5 # <cjk> +0x8DC3 U+50AC # <cjk> +0x8DC4 U+518D # <cjk> +0x8DC5 U+6700 # <cjk> +0x8DC6 U+54C9 # <cjk> +0x8DC7 U+585E # <cjk> +0x8DC8 U+59BB # <cjk> +0x8DC9 U+5BB0 # <cjk> +0x8DCA U+5F69 # <cjk> +0x8DCB U+624D # <cjk> +0x8DCC U+63A1 # <cjk> +0x8DCD U+683D # <cjk> +0x8DCE U+6B73 # <cjk> +0x8DCF U+6E08 # <cjk> +0x8DD0 U+707D # <cjk> +0x8DD1 U+91C7 # <cjk> +0x8DD2 U+7280 # <cjk> +0x8DD3 U+7815 # <cjk> +0x8DD4 U+7826 # <cjk> +0x8DD5 U+796D # <cjk> +0x8DD6 U+658E # <cjk> +0x8DD7 U+7D30 # <cjk> +0x8DD8 U+83DC # <cjk> +0x8DD9 U+88C1 # <cjk> +0x8DDA U+8F09 # <cjk> +0x8DDB U+969B # <cjk> +0x8DDC U+5264 # <cjk> +0x8DDD U+5728 # <cjk> +0x8DDE U+6750 # <cjk> +0x8DDF U+7F6A # <cjk> +0x8DE0 U+8CA1 # <cjk> +0x8DE1 U+51B4 # <cjk> +0x8DE2 U+5742 # <cjk> +0x8DE3 U+962A # <cjk> +0x8DE4 U+583A # <cjk> +0x8DE5 U+698A # <cjk> +0x8DE6 U+80B4 # <cjk> +0x8DE7 U+54B2 # <cjk> +0x8DE8 U+5D0E # <cjk> +0x8DE9 U+57FC # <cjk> +0x8DEA U+7895 # <cjk> +0x8DEB U+9DFA # <cjk> +0x8DEC U+4F5C # <cjk> +0x8DED U+524A # <cjk> +0x8DEE U+548B # <cjk> +0x8DEF U+643E # <cjk> +0x8DF0 U+6628 # <cjk> +0x8DF1 U+6714 # <cjk> +0x8DF2 U+67F5 # <cjk> +0x8DF3 U+7A84 # <cjk> +0x8DF4 U+7B56 # <cjk> +0x8DF5 U+7D22 # <cjk> +0x8DF6 U+932F # <cjk> +0x8DF7 U+685C # <cjk> +0x8DF8 U+9BAD # <cjk> +0x8DF9 U+7B39 # <cjk> +0x8DFA U+5319 # <cjk> +0x8DFB U+518A # <cjk> +0x8DFC U+5237 # <cjk> +0x8E40 U+5BDF # <cjk> +0x8E41 U+62F6 # <cjk> +0x8E42 U+64AE # <cjk> +0x8E43 U+64E6 # <cjk> +0x8E44 U+672D # <cjk> +0x8E45 U+6BBA # <cjk> +0x8E46 U+85A9 # <cjk> +0x8E47 U+96D1 # <cjk> +0x8E48 U+7690 # <cjk> +0x8E49 U+9BD6 # <cjk> +0x8E4A U+634C # <cjk> +0x8E4B U+9306 # <cjk> +0x8E4C U+9BAB # <cjk> +0x8E4D U+76BF # <cjk> +0x8E4E U+6652 # <cjk> +0x8E4F U+4E09 # <cjk> +0x8E50 U+5098 # <cjk> +0x8E51 U+53C2 # <cjk> +0x8E52 U+5C71 # <cjk> +0x8E53 U+60E8 # <cjk> +0x8E54 U+6492 # <cjk> +0x8E55 U+6563 # <cjk> +0x8E56 U+685F # <cjk> +0x8E57 U+71E6 # <cjk> +0x8E58 U+73CA # <cjk> +0x8E59 U+7523 # <cjk> +0x8E5A U+7B97 # <cjk> +0x8E5B U+7E82 # <cjk> +0x8E5C U+8695 # <cjk> +0x8E5D U+8B83 # <cjk> +0x8E5E U+8CDB # <cjk> +0x8E5F U+9178 # <cjk> +0x8E60 U+9910 # <cjk> +0x8E61 U+65AC # <cjk> +0x8E62 U+66AB # <cjk> +0x8E63 U+6B8B # <cjk> +0x8E64 U+4ED5 # <cjk> +0x8E65 U+4ED4 # <cjk> +0x8E66 U+4F3A # <cjk> +0x8E67 U+4F7F # <cjk> +0x8E68 U+523A # <cjk> +0x8E69 U+53F8 # <cjk> +0x8E6A U+53F2 # <cjk> +0x8E6B U+55E3 # <cjk> +0x8E6C U+56DB # <cjk> +0x8E6D U+58EB # <cjk> +0x8E6E U+59CB # <cjk> +0x8E6F U+59C9 # <cjk> +0x8E70 U+59FF # <cjk> +0x8E71 U+5B50 # <cjk> +0x8E72 U+5C4D # <cjk> +0x8E73 U+5E02 # <cjk> +0x8E74 U+5E2B # <cjk> +0x8E75 U+5FD7 # <cjk> +0x8E76 U+601D # <cjk> +0x8E77 U+6307 # <cjk> +0x8E78 U+652F # <cjk> +0x8E79 U+5B5C # <cjk> +0x8E7A U+65AF # <cjk> +0x8E7B U+65BD # <cjk> +0x8E7C U+65E8 # <cjk> +0x8E7D U+679D # <cjk> +0x8E7E U+6B62 # <cjk> +0x8E80 U+6B7B # <cjk> +0x8E81 U+6C0F # <cjk> +0x8E82 U+7345 # <cjk> +0x8E83 U+7949 # <cjk> +0x8E84 U+79C1 # <cjk> +0x8E85 U+7CF8 # <cjk> +0x8E86 U+7D19 # <cjk> +0x8E87 U+7D2B # <cjk> +0x8E88 U+80A2 # <cjk> +0x8E89 U+8102 # <cjk> +0x8E8A U+81F3 # <cjk> +0x8E8B U+8996 # <cjk> +0x8E8C U+8A5E # <cjk> +0x8E8D U+8A69 # <cjk> +0x8E8E U+8A66 # <cjk> +0x8E8F U+8A8C # <cjk> +0x8E90 U+8AEE # <cjk> +0x8E91 U+8CC7 # <cjk> +0x8E92 U+8CDC # <cjk> +0x8E93 U+96CC # <cjk> +0x8E94 U+98FC # <cjk> +0x8E95 U+6B6F # <cjk> +0x8E96 U+4E8B # <cjk> +0x8E97 U+4F3C # <cjk> +0x8E98 U+4F8D # <cjk> +0x8E99 U+5150 # <cjk> +0x8E9A U+5B57 # <cjk> +0x8E9B U+5BFA # <cjk> +0x8E9C U+6148 # <cjk> +0x8E9D U+6301 # <cjk> +0x8E9E U+6642 # <cjk> +0x8E9F U+6B21 # <cjk> +0x8EA0 U+6ECB # <cjk> +0x8EA1 U+6CBB # <cjk> +0x8EA2 U+723E # <cjk> +0x8EA3 U+74BD # <cjk> +0x8EA4 U+75D4 # <cjk> +0x8EA5 U+78C1 # <cjk> +0x8EA6 U+793A # <cjk> +0x8EA7 U+800C # <cjk> +0x8EA8 U+8033 # <cjk> +0x8EA9 U+81EA # <cjk> +0x8EAA U+8494 # <cjk> +0x8EAB U+8F9E # <cjk> +0x8EAC U+6C50 # <cjk> +0x8EAD U+9E7F # <cjk> +0x8EAE U+5F0F # <cjk> +0x8EAF U+8B58 # <cjk> +0x8EB0 U+9D2B # <cjk> +0x8EB1 U+7AFA # <cjk> +0x8EB2 U+8EF8 # <cjk> +0x8EB3 U+5B8D # <cjk> +0x8EB4 U+96EB # <cjk> +0x8EB5 U+4E03 # <cjk> +0x8EB6 U+53F1 # <cjk> +0x8EB7 U+57F7 # <cjk> +0x8EB8 U+5931 # <cjk> +0x8EB9 U+5AC9 # <cjk> +0x8EBA U+5BA4 # <cjk> +0x8EBB U+6089 # <cjk> +0x8EBC U+6E7F # <cjk> +0x8EBD U+6F06 # <cjk> +0x8EBE U+75BE # <cjk> +0x8EBF U+8CEA # <cjk> +0x8EC0 U+5B9F # <cjk> +0x8EC1 U+8500 # <cjk> +0x8EC2 U+7BE0 # <cjk> +0x8EC3 U+5072 # <cjk> +0x8EC4 U+67F4 # <cjk> +0x8EC5 U+829D # <cjk> +0x8EC6 U+5C61 # <cjk> +0x8EC7 U+854A # <cjk> +0x8EC8 U+7E1E # <cjk> +0x8EC9 U+820E # <cjk> +0x8ECA U+5199 # <cjk> +0x8ECB U+5C04 # <cjk> +0x8ECC U+6368 # <cjk> +0x8ECD U+8D66 # <cjk> +0x8ECE U+659C # <cjk> +0x8ECF U+716E # <cjk> +0x8ED0 U+793E # <cjk> +0x8ED1 U+7D17 # <cjk> +0x8ED2 U+8005 # <cjk> +0x8ED3 U+8B1D # <cjk> +0x8ED4 U+8ECA # <cjk> +0x8ED5 U+906E # <cjk> +0x8ED6 U+86C7 # <cjk> +0x8ED7 U+90AA # <cjk> +0x8ED8 U+501F # <cjk> +0x8ED9 U+52FA # <cjk> +0x8EDA U+5C3A # <cjk> +0x8EDB U+6753 # <cjk> +0x8EDC U+707C # <cjk> +0x8EDD U+7235 # <cjk> +0x8EDE U+914C # <cjk> +0x8EDF U+91C8 # <cjk> +0x8EE0 U+932B # <cjk> +0x8EE1 U+82E5 # <cjk> +0x8EE2 U+5BC2 # <cjk> +0x8EE3 U+5F31 # <cjk> +0x8EE4 U+60F9 # <cjk> +0x8EE5 U+4E3B # <cjk> +0x8EE6 U+53D6 # <cjk> +0x8EE7 U+5B88 # <cjk> +0x8EE8 U+624B # <cjk> +0x8EE9 U+6731 # <cjk> +0x8EEA U+6B8A # <cjk> +0x8EEB U+72E9 # <cjk> +0x8EEC U+73E0 # <cjk> +0x8EED U+7A2E # <cjk> +0x8EEE U+816B # <cjk> +0x8EEF U+8DA3 # <cjk> +0x8EF0 U+9152 # <cjk> +0x8EF1 U+9996 # <cjk> +0x8EF2 U+5112 # <cjk> +0x8EF3 U+53D7 # <cjk> +0x8EF4 U+546A # <cjk> +0x8EF5 U+5BFF # <cjk> +0x8EF6 U+6388 # <cjk> +0x8EF7 U+6A39 # <cjk> +0x8EF8 U+7DAC # <cjk> +0x8EF9 U+9700 # <cjk> +0x8EFA U+56DA # <cjk> +0x8EFB U+53CE # <cjk> +0x8EFC U+5468 # <cjk> +0x8F40 U+5B97 # <cjk> +0x8F41 U+5C31 # <cjk> +0x8F42 U+5DDE # <cjk> +0x8F43 U+4FEE # <cjk> +0x8F44 U+6101 # <cjk> +0x8F45 U+62FE # <cjk> +0x8F46 U+6D32 # <cjk> +0x8F47 U+79C0 # <cjk> +0x8F48 U+79CB # <cjk> +0x8F49 U+7D42 # <cjk> +0x8F4A U+7E4D # <cjk> +0x8F4B U+7FD2 # <cjk> +0x8F4C U+81ED # <cjk> +0x8F4D U+821F # <cjk> +0x8F4E U+8490 # <cjk> +0x8F4F U+8846 # <cjk> +0x8F50 U+8972 # <cjk> +0x8F51 U+8B90 # <cjk> +0x8F52 U+8E74 # <cjk> +0x8F53 U+8F2F # <cjk> +0x8F54 U+9031 # <cjk> +0x8F55 U+914B # <cjk> +0x8F56 U+916C # <cjk> +0x8F57 U+96C6 # <cjk> +0x8F58 U+919C # <cjk> +0x8F59 U+4EC0 # <cjk> +0x8F5A U+4F4F # <cjk> +0x8F5B U+5145 # <cjk> +0x8F5C U+5341 # <cjk> +0x8F5D U+5F93 # <cjk> +0x8F5E U+620E # <cjk> +0x8F5F U+67D4 # <cjk> +0x8F60 U+6C41 # <cjk> +0x8F61 U+6E0B # <cjk> +0x8F62 U+7363 # <cjk> +0x8F63 U+7E26 # <cjk> +0x8F64 U+91CD # <cjk> +0x8F65 U+9283 # <cjk> +0x8F66 U+53D4 # <cjk> +0x8F67 U+5919 # <cjk> +0x8F68 U+5BBF # <cjk> +0x8F69 U+6DD1 # <cjk> +0x8F6A U+795D # <cjk> +0x8F6B U+7E2E # <cjk> +0x8F6C U+7C9B # <cjk> +0x8F6D U+587E # <cjk> +0x8F6E U+719F # <cjk> +0x8F6F U+51FA # <cjk> +0x8F70 U+8853 # <cjk> +0x8F71 U+8FF0 # <cjk> +0x8F72 U+4FCA # <cjk> +0x8F73 U+5CFB # <cjk> +0x8F74 U+6625 # <cjk> +0x8F75 U+77AC # <cjk> +0x8F76 U+7AE3 # <cjk> +0x8F77 U+821C # <cjk> +0x8F78 U+99FF # <cjk> +0x8F79 U+51C6 # <cjk> +0x8F7A U+5FAA # <cjk> +0x8F7B U+65EC # <cjk> +0x8F7C U+696F # <cjk> +0x8F7D U+6B89 # <cjk> +0x8F7E U+6DF3 # <cjk> +0x8F80 U+6E96 # <cjk> +0x8F81 U+6F64 # <cjk> +0x8F82 U+76FE # <cjk> +0x8F83 U+7D14 # <cjk> +0x8F84 U+5DE1 # <cjk> +0x8F85 U+9075 # <cjk> +0x8F86 U+9187 # <cjk> +0x8F87 U+9806 # <cjk> +0x8F88 U+51E6 # <cjk> +0x8F89 U+521D # <cjk> +0x8F8A U+6240 # <cjk> +0x8F8B U+6691 # <cjk> +0x8F8C U+66D9 # <cjk> +0x8F8D U+6E1A # <cjk> +0x8F8E U+5EB6 # <cjk> +0x8F8F U+7DD2 # <cjk> +0x8F90 U+7F72 # <cjk> +0x8F91 U+66F8 # <cjk> +0x8F92 U+85AF # <cjk> +0x8F93 U+85F7 # <cjk> +0x8F94 U+8AF8 # <cjk> +0x8F95 U+52A9 # <cjk> +0x8F96 U+53D9 # <cjk> +0x8F97 U+5973 # <cjk> +0x8F98 U+5E8F # <cjk> +0x8F99 U+5F90 # <cjk> +0x8F9A U+6055 # <cjk> +0x8F9B U+92E4 # <cjk> +0x8F9C U+9664 # <cjk> +0x8F9D U+50B7 # <cjk> +0x8F9E U+511F # <cjk> +0x8F9F U+52DD # <cjk> +0x8FA0 U+5320 # <cjk> +0x8FA1 U+5347 # <cjk> +0x8FA2 U+53EC # <cjk> +0x8FA3 U+54E8 # <cjk> +0x8FA4 U+5546 # <cjk> +0x8FA5 U+5531 # <cjk> +0x8FA6 U+5617 # <cjk> +0x8FA7 U+5968 # <cjk> +0x8FA8 U+59BE # <cjk> +0x8FA9 U+5A3C # <cjk> +0x8FAA U+5BB5 # <cjk> +0x8FAB U+5C06 # <cjk> +0x8FAC U+5C0F # <cjk> +0x8FAD U+5C11 # <cjk> +0x8FAE U+5C1A # <cjk> +0x8FAF U+5E84 # <cjk> +0x8FB0 U+5E8A # <cjk> +0x8FB1 U+5EE0 # <cjk> +0x8FB2 U+5F70 # <cjk> +0x8FB3 U+627F # <cjk> +0x8FB4 U+6284 # <cjk> +0x8FB5 U+62DB # <cjk> +0x8FB6 U+638C # <cjk> +0x8FB7 U+6377 # <cjk> +0x8FB8 U+6607 # <cjk> +0x8FB9 U+660C # <cjk> +0x8FBA U+662D # <cjk> +0x8FBB U+6676 # <cjk> +0x8FBC U+677E # <cjk> +0x8FBD U+68A2 # <cjk> +0x8FBE U+6A1F # <cjk> +0x8FBF U+6A35 # <cjk> +0x8FC0 U+6CBC # <cjk> +0x8FC1 U+6D88 # <cjk> +0x8FC2 U+6E09 # <cjk> +0x8FC3 U+6E58 # <cjk> +0x8FC4 U+713C # <cjk> +0x8FC5 U+7126 # <cjk> +0x8FC6 U+7167 # <cjk> +0x8FC7 U+75C7 # <cjk> +0x8FC8 U+7701 # <cjk> +0x8FC9 U+785D # <cjk> +0x8FCA U+7901 # <cjk> +0x8FCB U+7965 # <cjk> +0x8FCC U+79F0 # <cjk> +0x8FCD U+7AE0 # <cjk> +0x8FCE U+7B11 # <cjk> +0x8FCF U+7CA7 # <cjk> +0x8FD0 U+7D39 # <cjk> +0x8FD1 U+8096 # <cjk> +0x8FD2 U+83D6 # <cjk> +0x8FD3 U+848B # <cjk> +0x8FD4 U+8549 # <cjk> +0x8FD5 U+885D # <cjk> +0x8FD6 U+88F3 # <cjk> +0x8FD7 U+8A1F # <cjk> +0x8FD8 U+8A3C # <cjk> +0x8FD9 U+8A54 # <cjk> +0x8FDA U+8A73 # <cjk> +0x8FDB U+8C61 # <cjk> +0x8FDC U+8CDE # <cjk> +0x8FDD U+91A4 # <cjk> +0x8FDE U+9266 # <cjk> +0x8FDF U+937E # <cjk> +0x8FE0 U+9418 # <cjk> +0x8FE1 U+969C # <cjk> +0x8FE2 U+9798 # <cjk> +0x8FE3 U+4E0A # <cjk> +0x8FE4 U+4E08 # <cjk> +0x8FE5 U+4E1E # <cjk> +0x8FE6 U+4E57 # <cjk> +0x8FE7 U+5197 # <cjk> +0x8FE8 U+5270 # <cjk> +0x8FE9 U+57CE # <cjk> +0x8FEA U+5834 # <cjk> +0x8FEB U+58CC # <cjk> +0x8FEC U+5B22 # <cjk> +0x8FED U+5E38 # <cjk> +0x8FEE U+60C5 # <cjk> +0x8FEF U+64FE # <cjk> +0x8FF0 U+6761 # <cjk> +0x8FF1 U+6756 # <cjk> +0x8FF2 U+6D44 # <cjk> +0x8FF3 U+72B6 # <cjk> +0x8FF4 U+7573 # <cjk> +0x8FF5 U+7A63 # <cjk> +0x8FF6 U+84B8 # <cjk> +0x8FF7 U+8B72 # <cjk> +0x8FF8 U+91B8 # <cjk> +0x8FF9 U+9320 # <cjk> +0x8FFA U+5631 # <cjk> +0x8FFB U+57F4 # <cjk> +0x8FFC U+98FE # <cjk> +0x9040 U+62ED # <cjk> +0x9041 U+690D # <cjk> +0x9042 U+6B96 # <cjk> +0x9043 U+71ED # <cjk> +0x9044 U+7E54 # <cjk> +0x9045 U+8077 # <cjk> +0x9046 U+8272 # <cjk> +0x9047 U+89E6 # <cjk> +0x9048 U+98DF # <cjk> +0x9049 U+8755 # <cjk> +0x904A U+8FB1 # <cjk> +0x904B U+5C3B # <cjk> +0x904C U+4F38 # <cjk> +0x904D U+4FE1 # <cjk> +0x904E U+4FB5 # <cjk> +0x904F U+5507 # <cjk> +0x9050 U+5A20 # <cjk> +0x9051 U+5BDD # <cjk> +0x9052 U+5BE9 # <cjk> +0x9053 U+5FC3 # <cjk> +0x9054 U+614E # <cjk> +0x9055 U+632F # <cjk> +0x9056 U+65B0 # <cjk> +0x9057 U+664B # <cjk> +0x9058 U+68EE # <cjk> +0x9059 U+699B # <cjk> +0x905A U+6D78 # <cjk> +0x905B U+6DF1 # <cjk> +0x905C U+7533 # <cjk> +0x905D U+75B9 # <cjk> +0x905E U+771F # <cjk> +0x905F U+795E # <cjk> +0x9060 U+79E6 # <cjk> +0x9061 U+7D33 # <cjk> +0x9062 U+81E3 # <cjk> +0x9063 U+82AF # <cjk> +0x9064 U+85AA # <cjk> +0x9065 U+89AA # <cjk> +0x9066 U+8A3A # <cjk> +0x9067 U+8EAB # <cjk> +0x9068 U+8F9B # <cjk> +0x9069 U+9032 # <cjk> +0x906A U+91DD # <cjk> +0x906B U+9707 # <cjk> +0x906C U+4EBA # <cjk> +0x906D U+4EC1 # <cjk> +0x906E U+5203 # <cjk> +0x906F U+5875 # <cjk> +0x9070 U+58EC # <cjk> +0x9071 U+5C0B # <cjk> +0x9072 U+751A # <cjk> +0x9073 U+5C3D # <cjk> +0x9074 U+814E # <cjk> +0x9075 U+8A0A # <cjk> +0x9076 U+8FC5 # <cjk> +0x9077 U+9663 # <cjk> +0x9078 U+976D # <cjk> +0x9079 U+7B25 # <cjk> +0x907A U+8ACF # <cjk> +0x907B U+9808 # <cjk> +0x907C U+9162 # <cjk> +0x907D U+56F3 # <cjk> +0x907E U+53A8 # <cjk> +0x9080 U+9017 # <cjk> +0x9081 U+5439 # <cjk> +0x9082 U+5782 # <cjk> +0x9083 U+5E25 # <cjk> +0x9084 U+63A8 # <cjk> +0x9085 U+6C34 # <cjk> +0x9086 U+708A # <cjk> +0x9087 U+7761 # <cjk> +0x9088 U+7C8B # <cjk> +0x9089 U+7FE0 # <cjk> +0x908A U+8870 # <cjk> +0x908B U+9042 # <cjk> +0x908C U+9154 # <cjk> +0x908D U+9310 # <cjk> +0x908E U+9318 # <cjk> +0x908F U+968F # <cjk> +0x9090 U+745E # <cjk> +0x9091 U+9AC4 # <cjk> +0x9092 U+5D07 # <cjk> +0x9093 U+5D69 # <cjk> +0x9094 U+6570 # <cjk> +0x9095 U+67A2 # <cjk> +0x9096 U+8DA8 # <cjk> +0x9097 U+96DB # <cjk> +0x9098 U+636E # <cjk> +0x9099 U+6749 # <cjk> +0x909A U+6919 # <cjk> +0x909B U+83C5 # <cjk> +0x909C U+9817 # <cjk> +0x909D U+96C0 # <cjk> +0x909E U+88FE # <cjk> +0x909F U+6F84 # <cjk> +0x90A0 U+647A # <cjk> +0x90A1 U+5BF8 # <cjk> +0x90A2 U+4E16 # <cjk> +0x90A3 U+702C # <cjk> +0x90A4 U+755D # <cjk> +0x90A5 U+662F # <cjk> +0x90A6 U+51C4 # <cjk> +0x90A7 U+5236 # <cjk> +0x90A8 U+52E2 # <cjk> +0x90A9 U+59D3 # <cjk> +0x90AA U+5F81 # <cjk> +0x90AB U+6027 # <cjk> +0x90AC U+6210 # <cjk> +0x90AD U+653F # <cjk> +0x90AE U+6574 # <cjk> +0x90AF U+661F # <cjk> +0x90B0 U+6674 # <cjk> +0x90B1 U+68F2 # <cjk> +0x90B2 U+6816 # <cjk> +0x90B3 U+6B63 # <cjk> +0x90B4 U+6E05 # <cjk> +0x90B5 U+7272 # <cjk> +0x90B6 U+751F # <cjk> +0x90B7 U+76DB # <cjk> +0x90B8 U+7CBE # <cjk> +0x90B9 U+8056 # <cjk> +0x90BA U+58F0 # <cjk> +0x90BB U+88FD # <cjk> +0x90BC U+897F # <cjk> +0x90BD U+8AA0 # <cjk> +0x90BE U+8A93 # <cjk> +0x90BF U+8ACB # <cjk> +0x90C0 U+901D # <cjk> +0x90C1 U+9192 # <cjk> +0x90C2 U+9752 # <cjk> +0x90C3 U+9759 # <cjk> +0x90C4 U+6589 # <cjk> +0x90C5 U+7A0E # <cjk> +0x90C6 U+8106 # <cjk> +0x90C7 U+96BB # <cjk> +0x90C8 U+5E2D # <cjk> +0x90C9 U+60DC # <cjk> +0x90CA U+621A # <cjk> +0x90CB U+65A5 # <cjk> +0x90CC U+6614 # <cjk> +0x90CD U+6790 # <cjk> +0x90CE U+77F3 # <cjk> +0x90CF U+7A4D # <cjk> +0x90D0 U+7C4D # <cjk> +0x90D1 U+7E3E # <cjk> +0x90D2 U+810A # <cjk> +0x90D3 U+8CAC # <cjk> +0x90D4 U+8D64 # <cjk> +0x90D5 U+8DE1 # <cjk> +0x90D6 U+8E5F # <cjk> +0x90D7 U+78A9 # <cjk> +0x90D8 U+5207 # <cjk> +0x90D9 U+62D9 # <cjk> +0x90DA U+63A5 # <cjk> +0x90DB U+6442 # <cjk> +0x90DC U+6298 # <cjk> +0x90DD U+8A2D # <cjk> +0x90DE U+7A83 # <cjk> +0x90DF U+7BC0 # <cjk> +0x90E0 U+8AAC # <cjk> +0x90E1 U+96EA # <cjk> +0x90E2 U+7D76 # <cjk> +0x90E3 U+820C # <cjk> +0x90E4 U+8749 # <cjk> +0x90E5 U+4ED9 # <cjk> +0x90E6 U+5148 # <cjk> +0x90E7 U+5343 # <cjk> +0x90E8 U+5360 # <cjk> +0x90E9 U+5BA3 # <cjk> +0x90EA U+5C02 # <cjk> +0x90EB U+5C16 # <cjk> +0x90EC U+5DDD # <cjk> +0x90ED U+6226 # <cjk> +0x90EE U+6247 # <cjk> +0x90EF U+64B0 # <cjk> +0x90F0 U+6813 # <cjk> +0x90F1 U+6834 # <cjk> +0x90F2 U+6CC9 # <cjk> +0x90F3 U+6D45 # <cjk> +0x90F4 U+6D17 # <cjk> +0x90F5 U+67D3 # <cjk> +0x90F6 U+6F5C # <cjk> +0x90F7 U+714E # <cjk> +0x90F8 U+717D # <cjk> +0x90F9 U+65CB # <cjk> +0x90FA U+7A7F # <cjk> +0x90FB U+7BAD # <cjk> +0x90FC U+7DDA # <cjk> +0x9140 U+7E4A # <cjk> +0x9141 U+7FA8 # <cjk> +0x9142 U+817A # <cjk> +0x9143 U+821B # <cjk> +0x9144 U+8239 # <cjk> +0x9145 U+85A6 # <cjk> +0x9146 U+8A6E # <cjk> +0x9147 U+8CCE # <cjk> +0x9148 U+8DF5 # <cjk> +0x9149 U+9078 # <cjk> +0x914A U+9077 # <cjk> +0x914B U+92AD # <cjk> +0x914C U+9291 # <cjk> +0x914D U+9583 # <cjk> +0x914E U+9BAE # <cjk> +0x914F U+524D # <cjk> +0x9150 U+5584 # <cjk> +0x9151 U+6F38 # <cjk> +0x9152 U+7136 # <cjk> +0x9153 U+5168 # <cjk> +0x9154 U+7985 # <cjk> +0x9155 U+7E55 # <cjk> +0x9156 U+81B3 # <cjk> +0x9157 U+7CCE # <cjk> +0x9158 U+564C # <cjk> +0x9159 U+5851 # <cjk> +0x915A U+5CA8 # <cjk> +0x915B U+63AA # <cjk> +0x915C U+66FE # <cjk> +0x915D U+66FD # <cjk> +0x915E U+695A # <cjk> +0x915F U+72D9 # <cjk> +0x9160 U+758F # <cjk> +0x9161 U+758E # <cjk> +0x9162 U+790E # <cjk> +0x9163 U+7956 # <cjk> +0x9164 U+79DF # <cjk> +0x9165 U+7C97 # <cjk> +0x9166 U+7D20 # <cjk> +0x9167 U+7D44 # <cjk> +0x9168 U+8607 # <cjk> +0x9169 U+8A34 # <cjk> +0x916A U+963B # <cjk> +0x916B U+9061 # <cjk> +0x916C U+9F20 # <cjk> +0x916D U+50E7 # <cjk> +0x916E U+5275 # <cjk> +0x916F U+53CC # <cjk> +0x9170 U+53E2 # <cjk> +0x9171 U+5009 # <cjk> +0x9172 U+55AA # <cjk> +0x9173 U+58EE # <cjk> +0x9174 U+594F # <cjk> +0x9175 U+723D # <cjk> +0x9176 U+5B8B # <cjk> +0x9177 U+5C64 # <cjk> +0x9178 U+531D # <cjk> +0x9179 U+60E3 # <cjk> +0x917A U+60F3 # <cjk> +0x917B U+635C # <cjk> +0x917C U+6383 # <cjk> +0x917D U+633F # <cjk> +0x917E U+63BB # <cjk> +0x9180 U+64CD # <cjk> +0x9181 U+65E9 # <cjk> +0x9182 U+66F9 # <cjk> +0x9183 U+5DE3 # <cjk> +0x9184 U+69CD # <cjk> +0x9185 U+69FD # <cjk> +0x9186 U+6F15 # <cjk> +0x9187 U+71E5 # <cjk> +0x9188 U+4E89 # <cjk> +0x9189 U+75E9 # <cjk> +0x918A U+76F8 # <cjk> +0x918B U+7A93 # <cjk> +0x918C U+7CDF # <cjk> +0x918D U+7DCF # <cjk> +0x918E U+7D9C # <cjk> +0x918F U+8061 # <cjk> +0x9190 U+8349 # <cjk> +0x9191 U+8358 # <cjk> +0x9192 U+846C # <cjk> +0x9193 U+84BC # <cjk> +0x9194 U+85FB # <cjk> +0x9195 U+88C5 # <cjk> +0x9196 U+8D70 # <cjk> +0x9197 U+9001 # <cjk> +0x9198 U+906D # <cjk> +0x9199 U+9397 # <cjk> +0x919A U+971C # <cjk> +0x919B U+9A12 # <cjk> +0x919C U+50CF # <cjk> +0x919D U+5897 # <cjk> +0x919E U+618E # <cjk> +0x919F U+81D3 # <cjk> +0x91A0 U+8535 # <cjk> +0x91A1 U+8D08 # <cjk> +0x91A2 U+9020 # <cjk> +0x91A3 U+4FC3 # <cjk> +0x91A4 U+5074 # <cjk> +0x91A5 U+5247 # <cjk> +0x91A6 U+5373 # <cjk> +0x91A7 U+606F # <cjk> +0x91A8 U+6349 # <cjk> +0x91A9 U+675F # <cjk> +0x91AA U+6E2C # <cjk> +0x91AB U+8DB3 # <cjk> +0x91AC U+901F # <cjk> +0x91AD U+4FD7 # <cjk> +0x91AE U+5C5E # <cjk> +0x91AF U+8CCA # <cjk> +0x91B0 U+65CF # <cjk> +0x91B1 U+7D9A # <cjk> +0x91B2 U+5352 # <cjk> +0x91B3 U+8896 # <cjk> +0x91B4 U+5176 # <cjk> +0x91B5 U+63C3 # <cjk> +0x91B6 U+5B58 # <cjk> +0x91B7 U+5B6B # <cjk> +0x91B8 U+5C0A # <cjk> +0x91B9 U+640D # <cjk> +0x91BA U+6751 # <cjk> +0x91BB U+905C # <cjk> +0x91BC U+4ED6 # <cjk> +0x91BD U+591A # <cjk> +0x91BE U+592A # <cjk> +0x91BF U+6C70 # <cjk> +0x91C0 U+8A51 # <cjk> +0x91C1 U+553E # <cjk> +0x91C2 U+5815 # <cjk> +0x91C3 U+59A5 # <cjk> +0x91C4 U+60F0 # <cjk> +0x91C5 U+6253 # <cjk> +0x91C6 U+67C1 # <cjk> +0x91C7 U+8235 # <cjk> +0x91C8 U+6955 # <cjk> +0x91C9 U+9640 # <cjk> +0x91CA U+99C4 # <cjk> +0x91CB U+9A28 # <cjk> +0x91CC U+4F53 # <cjk> +0x91CD U+5806 # <cjk> +0x91CE U+5BFE # <cjk> +0x91CF U+8010 # <cjk> +0x91D0 U+5CB1 # <cjk> +0x91D1 U+5E2F # <cjk> +0x91D2 U+5F85 # <cjk> +0x91D3 U+6020 # <cjk> +0x91D4 U+614B # <cjk> +0x91D5 U+6234 # <cjk> +0x91D6 U+66FF # <cjk> +0x91D7 U+6CF0 # <cjk> +0x91D8 U+6EDE # <cjk> +0x91D9 U+80CE # <cjk> +0x91DA U+817F # <cjk> +0x91DB U+82D4 # <cjk> +0x91DC U+888B # <cjk> +0x91DD U+8CB8 # <cjk> +0x91DE U+9000 # <cjk> +0x91DF U+902E # <cjk> +0x91E0 U+968A # <cjk> +0x91E1 U+9EDB # <cjk> +0x91E2 U+9BDB # <cjk> +0x91E3 U+4EE3 # <cjk> +0x91E4 U+53F0 # <cjk> +0x91E5 U+5927 # <cjk> +0x91E6 U+7B2C # <cjk> +0x91E7 U+918D # <cjk> +0x91E8 U+984C # <cjk> +0x91E9 U+9DF9 # <cjk> +0x91EA U+6EDD # <cjk> +0x91EB U+7027 # <cjk> +0x91EC U+5353 # <cjk> +0x91ED U+5544 # <cjk> +0x91EE U+5B85 # <cjk> +0x91EF U+6258 # <cjk> +0x91F0 U+629E # <cjk> +0x91F1 U+62D3 # <cjk> +0x91F2 U+6CA2 # <cjk> +0x91F3 U+6FEF # <cjk> +0x91F4 U+7422 # <cjk> +0x91F5 U+8A17 # <cjk> +0x91F6 U+9438 # <cjk> +0x91F7 U+6FC1 # <cjk> +0x91F8 U+8AFE # <cjk> +0x91F9 U+8338 # <cjk> +0x91FA U+51E7 # <cjk> +0x91FB U+86F8 # <cjk> +0x91FC U+53EA # <cjk> +0x9240 U+53E9 # <cjk> +0x9241 U+4F46 # <cjk> +0x9242 U+9054 # <cjk> +0x9243 U+8FB0 # <cjk> +0x9244 U+596A # <cjk> +0x9245 U+8131 # <cjk> +0x9246 U+5DFD # <cjk> +0x9247 U+7AEA # <cjk> +0x9248 U+8FBF # <cjk> +0x9249 U+68DA # <cjk> +0x924A U+8C37 # <cjk> +0x924B U+72F8 # <cjk> +0x924C U+9C48 # <cjk> +0x924D U+6A3D # <cjk> +0x924E U+8AB0 # <cjk> +0x924F U+4E39 # <cjk> +0x9250 U+5358 # <cjk> +0x9251 U+5606 # <cjk> +0x9252 U+5766 # <cjk> +0x9253 U+62C5 # <cjk> +0x9254 U+63A2 # <cjk> +0x9255 U+65E6 # <cjk> +0x9256 U+6B4E # <cjk> +0x9257 U+6DE1 # <cjk> +0x9258 U+6E5B # <cjk> +0x9259 U+70AD # <cjk> +0x925A U+77ED # <cjk> +0x925B U+7AEF # <cjk> +0x925C U+7BAA # <cjk> +0x925D U+7DBB # <cjk> +0x925E U+803D # <cjk> +0x925F U+80C6 # <cjk> +0x9260 U+86CB # <cjk> +0x9261 U+8A95 # <cjk> +0x9262 U+935B # <cjk> +0x9263 U+56E3 # <cjk> +0x9264 U+58C7 # <cjk> +0x9265 U+5F3E # <cjk> +0x9266 U+65AD # <cjk> +0x9267 U+6696 # <cjk> +0x9268 U+6A80 # <cjk> +0x9269 U+6BB5 # <cjk> +0x926A U+7537 # <cjk> +0x926B U+8AC7 # <cjk> +0x926C U+5024 # <cjk> +0x926D U+77E5 # <cjk> +0x926E U+5730 # <cjk> +0x926F U+5F1B # <cjk> +0x9270 U+6065 # <cjk> +0x9271 U+667A # <cjk> +0x9272 U+6C60 # <cjk> +0x9273 U+75F4 # <cjk> +0x9274 U+7A1A # <cjk> +0x9275 U+7F6E # <cjk> +0x9276 U+81F4 # <cjk> +0x9277 U+8718 # <cjk> +0x9278 U+9045 # <cjk> +0x9279 U+99B3 # <cjk> +0x927A U+7BC9 # <cjk> +0x927B U+755C # <cjk> +0x927C U+7AF9 # <cjk> +0x927D U+7B51 # <cjk> +0x927E U+84C4 # <cjk> +0x9280 U+9010 # <cjk> +0x9281 U+79E9 # <cjk> +0x9282 U+7A92 # <cjk> +0x9283 U+8336 # <cjk> +0x9284 U+5AE1 # <cjk> +0x9285 U+7740 # <cjk> +0x9286 U+4E2D # <cjk> +0x9287 U+4EF2 # <cjk> +0x9288 U+5B99 # <cjk> +0x9289 U+5FE0 # <cjk> +0x928A U+62BD # <cjk> +0x928B U+663C # <cjk> +0x928C U+67F1 # <cjk> +0x928D U+6CE8 # <cjk> +0x928E U+866B # <cjk> +0x928F U+8877 # <cjk> +0x9290 U+8A3B # <cjk> +0x9291 U+914E # <cjk> +0x9292 U+92F3 # <cjk> +0x9293 U+99D0 # <cjk> +0x9294 U+6A17 # <cjk> +0x9295 U+7026 # <cjk> +0x9296 U+732A # <cjk> +0x9297 U+82E7 # <cjk> +0x9298 U+8457 # <cjk> +0x9299 U+8CAF # <cjk> +0x929A U+4E01 # <cjk> +0x929B U+5146 # <cjk> +0x929C U+51CB # <cjk> +0x929D U+558B # <cjk> +0x929E U+5BF5 # <cjk> +0x929F U+5E16 # <cjk> +0x92A0 U+5E33 # <cjk> +0x92A1 U+5E81 # <cjk> +0x92A2 U+5F14 # <cjk> +0x92A3 U+5F35 # <cjk> +0x92A4 U+5F6B # <cjk> +0x92A5 U+5FB4 # <cjk> +0x92A6 U+61F2 # <cjk> +0x92A7 U+6311 # <cjk> +0x92A8 U+66A2 # <cjk> +0x92A9 U+671D # <cjk> +0x92AA U+6F6E # <cjk> +0x92AB U+7252 # <cjk> +0x92AC U+753A # <cjk> +0x92AD U+773A # <cjk> +0x92AE U+8074 # <cjk> +0x92AF U+8139 # <cjk> +0x92B0 U+8178 # <cjk> +0x92B1 U+8776 # <cjk> +0x92B2 U+8ABF # <cjk> +0x92B3 U+8ADC # <cjk> +0x92B4 U+8D85 # <cjk> +0x92B5 U+8DF3 # <cjk> +0x92B6 U+929A # <cjk> +0x92B7 U+9577 # <cjk> +0x92B8 U+9802 # <cjk> +0x92B9 U+9CE5 # <cjk> +0x92BA U+52C5 # <cjk> +0x92BB U+6357 # <cjk> +0x92BC U+76F4 # <cjk> +0x92BD U+6715 # <cjk> +0x92BE U+6C88 # <cjk> +0x92BF U+73CD # <cjk> +0x92C0 U+8CC3 # <cjk> +0x92C1 U+93AE # <cjk> +0x92C2 U+9673 # <cjk> +0x92C3 U+6D25 # <cjk> +0x92C4 U+589C # <cjk> +0x92C5 U+690E # <cjk> +0x92C6 U+69CC # <cjk> +0x92C7 U+8FFD # <cjk> +0x92C8 U+939A # <cjk> +0x92C9 U+75DB # <cjk> +0x92CA U+901A # <cjk> +0x92CB U+585A # <cjk> +0x92CC U+6802 # <cjk> +0x92CD U+63B4 # <cjk> +0x92CE U+69FB # <cjk> +0x92CF U+4F43 # <cjk> +0x92D0 U+6F2C # <cjk> +0x92D1 U+67D8 # <cjk> +0x92D2 U+8FBB # <cjk> +0x92D3 U+8526 # <cjk> +0x92D4 U+7DB4 # <cjk> +0x92D5 U+9354 # <cjk> +0x92D6 U+693F # <cjk> +0x92D7 U+6F70 # <cjk> +0x92D8 U+576A # <cjk> +0x92D9 U+58F7 # <cjk> +0x92DA U+5B2C # <cjk> +0x92DB U+7D2C # <cjk> +0x92DC U+722A # <cjk> +0x92DD U+540A # <cjk> +0x92DE U+91E3 # <cjk> +0x92DF U+9DB4 # <cjk> +0x92E0 U+4EAD # <cjk> +0x92E1 U+4F4E # <cjk> +0x92E2 U+505C # <cjk> +0x92E3 U+5075 # <cjk> +0x92E4 U+5243 # <cjk> +0x92E5 U+8C9E # <cjk> +0x92E6 U+5448 # <cjk> +0x92E7 U+5824 # <cjk> +0x92E8 U+5B9A # <cjk> +0x92E9 U+5E1D # <cjk> +0x92EA U+5E95 # <cjk> +0x92EB U+5EAD # <cjk> +0x92EC U+5EF7 # <cjk> +0x92ED U+5F1F # <cjk> +0x92EE U+608C # <cjk> +0x92EF U+62B5 # <cjk> +0x92F0 U+633A # <cjk> +0x92F1 U+63D0 # <cjk> +0x92F2 U+68AF # <cjk> +0x92F3 U+6C40 # <cjk> +0x92F4 U+7887 # <cjk> +0x92F5 U+798E # <cjk> +0x92F6 U+7A0B # <cjk> +0x92F7 U+7DE0 # <cjk> +0x92F8 U+8247 # <cjk> +0x92F9 U+8A02 # <cjk> +0x92FA U+8AE6 # <cjk> +0x92FB U+8E44 # <cjk> +0x92FC U+9013 # <cjk> +0x9340 U+90B8 # <cjk> +0x9341 U+912D # <cjk> +0x9342 U+91D8 # <cjk> +0x9343 U+9F0E # <cjk> +0x9344 U+6CE5 # <cjk> +0x9345 U+6458 # <cjk> +0x9346 U+64E2 # <cjk> +0x9347 U+6575 # <cjk> +0x9348 U+6EF4 # <cjk> +0x9349 U+7684 # <cjk> +0x934A U+7B1B # <cjk> +0x934B U+9069 # <cjk> +0x934C U+93D1 # <cjk> +0x934D U+6EBA # <cjk> +0x934E U+54F2 # <cjk> +0x934F U+5FB9 # <cjk> +0x9350 U+64A4 # <cjk> +0x9351 U+8F4D # <cjk> +0x9352 U+8FED # <cjk> +0x9353 U+9244 # <cjk> +0x9354 U+5178 # <cjk> +0x9355 U+586B # <cjk> +0x9356 U+5929 # <cjk> +0x9357 U+5C55 # <cjk> +0x9358 U+5E97 # <cjk> +0x9359 U+6DFB # <cjk> +0x935A U+7E8F # <cjk> +0x935B U+751C # <cjk> +0x935C U+8CBC # <cjk> +0x935D U+8EE2 # <cjk> +0x935E U+985B # <cjk> +0x935F U+70B9 # <cjk> +0x9360 U+4F1D # <cjk> +0x9361 U+6BBF # <cjk> +0x9362 U+6FB1 # <cjk> +0x9363 U+7530 # <cjk> +0x9364 U+96FB # <cjk> +0x9365 U+514E # <cjk> +0x9366 U+5410 # <cjk> +0x9367 U+5835 # <cjk> +0x9368 U+5857 # <cjk> +0x9369 U+59AC # <cjk> +0x936A U+5C60 # <cjk> +0x936B U+5F92 # <cjk> +0x936C U+6597 # <cjk> +0x936D U+675C # <cjk> +0x936E U+6E21 # <cjk> +0x936F U+767B # <cjk> +0x9370 U+83DF # <cjk> +0x9371 U+8CED # <cjk> +0x9372 U+9014 # <cjk> +0x9373 U+90FD # <cjk> +0x9374 U+934D # <cjk> +0x9375 U+7825 # <cjk> +0x9376 U+783A # <cjk> +0x9377 U+52AA # <cjk> +0x9378 U+5EA6 # <cjk> +0x9379 U+571F # <cjk> +0x937A U+5974 # <cjk> +0x937B U+6012 # <cjk> +0x937C U+5012 # <cjk> +0x937D U+515A # <cjk> +0x937E U+51AC # <cjk> +0x9380 U+51CD # <cjk> +0x9381 U+5200 # <cjk> +0x9382 U+5510 # <cjk> +0x9383 U+5854 # <cjk> +0x9384 U+5858 # <cjk> +0x9385 U+5957 # <cjk> +0x9386 U+5B95 # <cjk> +0x9387 U+5CF6 # <cjk> +0x9388 U+5D8B # <cjk> +0x9389 U+60BC # <cjk> +0x938A U+6295 # <cjk> +0x938B U+642D # <cjk> +0x938C U+6771 # <cjk> +0x938D U+6843 # <cjk> +0x938E U+68BC # <cjk> +0x938F U+68DF # <cjk> +0x9390 U+76D7 # <cjk> +0x9391 U+6DD8 # <cjk> +0x9392 U+6E6F # <cjk> +0x9393 U+6D9B # <cjk> +0x9394 U+706F # <cjk> +0x9395 U+71C8 # <cjk> +0x9396 U+5F53 # <cjk> +0x9397 U+75D8 # <cjk> +0x9398 U+7977 # <cjk> +0x9399 U+7B49 # <cjk> +0x939A U+7B54 # <cjk> +0x939B U+7B52 # <cjk> +0x939C U+7CD6 # <cjk> +0x939D U+7D71 # <cjk> +0x939E U+5230 # <cjk> +0x939F U+8463 # <cjk> +0x93A0 U+8569 # <cjk> +0x93A1 U+85E4 # <cjk> +0x93A2 U+8A0E # <cjk> +0x93A3 U+8B04 # <cjk> +0x93A4 U+8C46 # <cjk> +0x93A5 U+8E0F # <cjk> +0x93A6 U+9003 # <cjk> +0x93A7 U+900F # <cjk> +0x93A8 U+9419 # <cjk> +0x93A9 U+9676 # <cjk> +0x93AA U+982D # <cjk> +0x93AB U+9A30 # <cjk> +0x93AC U+95D8 # <cjk> +0x93AD U+50CD # <cjk> +0x93AE U+52D5 # <cjk> +0x93AF U+540C # <cjk> +0x93B0 U+5802 # <cjk> +0x93B1 U+5C0E # <cjk> +0x93B2 U+61A7 # <cjk> +0x93B3 U+649E # <cjk> +0x93B4 U+6D1E # <cjk> +0x93B5 U+77B3 # <cjk> +0x93B6 U+7AE5 # <cjk> +0x93B7 U+80F4 # <cjk> +0x93B8 U+8404 # <cjk> +0x93B9 U+9053 # <cjk> +0x93BA U+9285 # <cjk> +0x93BB U+5CE0 # <cjk> +0x93BC U+9D07 # <cjk> +0x93BD U+533F # <cjk> +0x93BE U+5F97 # <cjk> +0x93BF U+5FB3 # <cjk> +0x93C0 U+6D9C # <cjk> +0x93C1 U+7279 # <cjk> +0x93C2 U+7763 # <cjk> +0x93C3 U+79BF # <cjk> +0x93C4 U+7BE4 # <cjk> +0x93C5 U+6BD2 # <cjk> +0x93C6 U+72EC # <cjk> +0x93C7 U+8AAD # <cjk> +0x93C8 U+6803 # <cjk> +0x93C9 U+6A61 # <cjk> +0x93CA U+51F8 # <cjk> +0x93CB U+7A81 # <cjk> +0x93CC U+6934 # <cjk> +0x93CD U+5C4A # <cjk> +0x93CE U+9CF6 # <cjk> +0x93CF U+82EB # <cjk> +0x93D0 U+5BC5 # <cjk> +0x93D1 U+9149 # <cjk> +0x93D2 U+701E # <cjk> +0x93D3 U+5678 # <cjk> +0x93D4 U+5C6F # <cjk> +0x93D5 U+60C7 # <cjk> +0x93D6 U+6566 # <cjk> +0x93D7 U+6C8C # <cjk> +0x93D8 U+8C5A # <cjk> +0x93D9 U+9041 # <cjk> +0x93DA U+9813 # <cjk> +0x93DB U+5451 # <cjk> +0x93DC U+66C7 # <cjk> +0x93DD U+920D # <cjk> +0x93DE U+5948 # <cjk> +0x93DF U+90A3 # <cjk> +0x93E0 U+5185 # <cjk> +0x93E1 U+4E4D # <cjk> +0x93E2 U+51EA # <cjk> +0x93E3 U+8599 # <cjk> +0x93E4 U+8B0E # <cjk> +0x93E5 U+7058 # <cjk> +0x93E6 U+637A # <cjk> +0x93E7 U+934B # <cjk> +0x93E8 U+6962 # <cjk> +0x93E9 U+99B4 # <cjk> +0x93EA U+7E04 # <cjk> +0x93EB U+7577 # <cjk> +0x93EC U+5357 # <cjk> +0x93ED U+6960 # <cjk> +0x93EE U+8EDF # <cjk> +0x93EF U+96E3 # <cjk> +0x93F0 U+6C5D # <cjk> +0x93F1 U+4E8C # <cjk> +0x93F2 U+5C3C # <cjk> +0x93F3 U+5F10 # <cjk> +0x93F4 U+8FE9 # <cjk> +0x93F5 U+5302 # <cjk> +0x93F6 U+8CD1 # <cjk> +0x93F7 U+8089 # <cjk> +0x93F8 U+8679 # <cjk> +0x93F9 U+5EFF # <cjk> +0x93FA U+65E5 # <cjk> +0x93FB U+4E73 # <cjk> +0x93FC U+5165 # <cjk> +0x9440 U+5982 # <cjk> +0x9441 U+5C3F # <cjk> +0x9442 U+97EE # <cjk> +0x9443 U+4EFB # <cjk> +0x9444 U+598A # <cjk> +0x9445 U+5FCD # <cjk> +0x9446 U+8A8D # <cjk> +0x9447 U+6FE1 # <cjk> +0x9448 U+79B0 # <cjk> +0x9449 U+7962 # <cjk> +0x944A U+5BE7 # <cjk> +0x944B U+8471 # <cjk> +0x944C U+732B # <cjk> +0x944D U+71B1 # <cjk> +0x944E U+5E74 # <cjk> +0x944F U+5FF5 # <cjk> +0x9450 U+637B # <cjk> +0x9451 U+649A # <cjk> +0x9452 U+71C3 # <cjk> +0x9453 U+7C98 # <cjk> +0x9454 U+4E43 # <cjk> +0x9455 U+5EFC # <cjk> +0x9456 U+4E4B # <cjk> +0x9457 U+57DC # <cjk> +0x9458 U+56A2 # <cjk> +0x9459 U+60A9 # <cjk> +0x945A U+6FC3 # <cjk> +0x945B U+7D0D # <cjk> +0x945C U+80FD # <cjk> +0x945D U+8133 # <cjk> +0x945E U+81BF # <cjk> +0x945F U+8FB2 # <cjk> +0x9460 U+8997 # <cjk> +0x9461 U+86A4 # <cjk> +0x9462 U+5DF4 # <cjk> +0x9463 U+628A # <cjk> +0x9464 U+64AD # <cjk> +0x9465 U+8987 # <cjk> +0x9466 U+6777 # <cjk> +0x9467 U+6CE2 # <cjk> +0x9468 U+6D3E # <cjk> +0x9469 U+7436 # <cjk> +0x946A U+7834 # <cjk> +0x946B U+5A46 # <cjk> +0x946C U+7F75 # <cjk> +0x946D U+82AD # <cjk> +0x946E U+99AC # <cjk> +0x946F U+4FF3 # <cjk> +0x9470 U+5EC3 # <cjk> +0x9471 U+62DD # <cjk> +0x9472 U+6392 # <cjk> +0x9473 U+6557 # <cjk> +0x9474 U+676F # <cjk> +0x9475 U+76C3 # <cjk> +0x9476 U+724C # <cjk> +0x9477 U+80CC # <cjk> +0x9478 U+80BA # <cjk> +0x9479 U+8F29 # <cjk> +0x947A U+914D # <cjk> +0x947B U+500D # <cjk> +0x947C U+57F9 # <cjk> +0x947D U+5A92 # <cjk> +0x947E U+6885 # <cjk> +0x9480 U+6973 # <cjk> +0x9481 U+7164 # <cjk> +0x9482 U+72FD # <cjk> +0x9483 U+8CB7 # <cjk> +0x9484 U+58F2 # <cjk> +0x9485 U+8CE0 # <cjk> +0x9486 U+966A # <cjk> +0x9487 U+9019 # <cjk> +0x9488 U+877F # <cjk> +0x9489 U+79E4 # <cjk> +0x948A U+77E7 # <cjk> +0x948B U+8429 # <cjk> +0x948C U+4F2F # <cjk> +0x948D U+5265 # <cjk> +0x948E U+535A # <cjk> +0x948F U+62CD # <cjk> +0x9490 U+67CF # <cjk> +0x9491 U+6CCA # <cjk> +0x9492 U+767D # <cjk> +0x9493 U+7B94 # <cjk> +0x9494 U+7C95 # <cjk> +0x9495 U+8236 # <cjk> +0x9496 U+8584 # <cjk> +0x9497 U+8FEB # <cjk> +0x9498 U+66DD # <cjk> +0x9499 U+6F20 # <cjk> +0x949A U+7206 # <cjk> +0x949B U+7E1B # <cjk> +0x949C U+83AB # <cjk> +0x949D U+99C1 # <cjk> +0x949E U+9EA6 # <cjk> +0x949F U+51FD # <cjk> +0x94A0 U+7BB1 # <cjk> +0x94A1 U+7872 # <cjk> +0x94A2 U+7BB8 # <cjk> +0x94A3 U+8087 # <cjk> +0x94A4 U+7B48 # <cjk> +0x94A5 U+6AE8 # <cjk> +0x94A6 U+5E61 # <cjk> +0x94A7 U+808C # <cjk> +0x94A8 U+7551 # <cjk> +0x94A9 U+7560 # <cjk> +0x94AA U+516B # <cjk> +0x94AB U+9262 # <cjk> +0x94AC U+6E8C # <cjk> +0x94AD U+767A # <cjk> +0x94AE U+9197 # <cjk> +0x94AF U+9AEA # <cjk> +0x94B0 U+4F10 # <cjk> +0x94B1 U+7F70 # <cjk> +0x94B2 U+629C # <cjk> +0x94B3 U+7B4F # <cjk> +0x94B4 U+95A5 # <cjk> +0x94B5 U+9CE9 # <cjk> +0x94B6 U+567A # <cjk> +0x94B7 U+5859 # <cjk> +0x94B8 U+86E4 # <cjk> +0x94B9 U+96BC # <cjk> +0x94BA U+4F34 # <cjk> +0x94BB U+5224 # <cjk> +0x94BC U+534A # <cjk> +0x94BD U+53CD # <cjk> +0x94BE U+53DB # <cjk> +0x94BF U+5E06 # <cjk> +0x94C0 U+642C # <cjk> +0x94C1 U+6591 # <cjk> +0x94C2 U+677F # <cjk> +0x94C3 U+6C3E # <cjk> +0x94C4 U+6C4E # <cjk> +0x94C5 U+7248 # <cjk> +0x94C6 U+72AF # <cjk> +0x94C7 U+73ED # <cjk> +0x94C8 U+7554 # <cjk> +0x94C9 U+7E41 # <cjk> +0x94CA U+822C # <cjk> +0x94CB U+85E9 # <cjk> +0x94CC U+8CA9 # <cjk> +0x94CD U+7BC4 # <cjk> +0x94CE U+91C6 # <cjk> +0x94CF U+7169 # <cjk> +0x94D0 U+9812 # <cjk> +0x94D1 U+98EF # <cjk> +0x94D2 U+633D # <cjk> +0x94D3 U+6669 # <cjk> +0x94D4 U+756A # <cjk> +0x94D5 U+76E4 # <cjk> +0x94D6 U+78D0 # <cjk> +0x94D7 U+8543 # <cjk> +0x94D8 U+86EE # <cjk> +0x94D9 U+532A # <cjk> +0x94DA U+5351 # <cjk> +0x94DB U+5426 # <cjk> +0x94DC U+5983 # <cjk> +0x94DD U+5E87 # <cjk> +0x94DE U+5F7C # <cjk> +0x94DF U+60B2 # <cjk> +0x94E0 U+6249 # <cjk> +0x94E1 U+6279 # <cjk> +0x94E2 U+62AB # <cjk> +0x94E3 U+6590 # <cjk> +0x94E4 U+6BD4 # <cjk> +0x94E5 U+6CCC # <cjk> +0x94E6 U+75B2 # <cjk> +0x94E7 U+76AE # <cjk> +0x94E8 U+7891 # <cjk> +0x94E9 U+79D8 # <cjk> +0x94EA U+7DCB # <cjk> +0x94EB U+7F77 # <cjk> +0x94EC U+80A5 # <cjk> +0x94ED U+88AB # <cjk> +0x94EE U+8AB9 # <cjk> +0x94EF U+8CBB # <cjk> +0x94F0 U+907F # <cjk> +0x94F1 U+975E # <cjk> +0x94F2 U+98DB # <cjk> +0x94F3 U+6A0B # <cjk> +0x94F4 U+7C38 # <cjk> +0x94F5 U+5099 # <cjk> +0x94F6 U+5C3E # <cjk> +0x94F7 U+5FAE # <cjk> +0x94F8 U+6787 # <cjk> +0x94F9 U+6BD8 # <cjk> +0x94FA U+7435 # <cjk> +0x94FB U+7709 # <cjk> +0x94FC U+7F8E # <cjk> +0x9540 U+9F3B # <cjk> +0x9541 U+67CA # <cjk> +0x9542 U+7A17 # <cjk> +0x9543 U+5339 # <cjk> +0x9544 U+758B # <cjk> +0x9545 U+9AED # <cjk> +0x9546 U+5F66 # <cjk> +0x9547 U+819D # <cjk> +0x9548 U+83F1 # <cjk> +0x9549 U+8098 # <cjk> +0x954A U+5F3C # <cjk> +0x954B U+5FC5 # <cjk> +0x954C U+7562 # <cjk> +0x954D U+7B46 # <cjk> +0x954E U+903C # <cjk> +0x954F U+6867 # <cjk> +0x9550 U+59EB # <cjk> +0x9551 U+5A9B # <cjk> +0x9552 U+7D10 # <cjk> +0x9553 U+767E # <cjk> +0x9554 U+8B2C # <cjk> +0x9555 U+4FF5 # <cjk> +0x9556 U+5F6A # <cjk> +0x9557 U+6A19 # <cjk> +0x9558 U+6C37 # <cjk> +0x9559 U+6F02 # <cjk> +0x955A U+74E2 # <cjk> +0x955B U+7968 # <cjk> +0x955C U+8868 # <cjk> +0x955D U+8A55 # <cjk> +0x955E U+8C79 # <cjk> +0x955F U+5EDF # <cjk> +0x9560 U+63CF # <cjk> +0x9561 U+75C5 # <cjk> +0x9562 U+79D2 # <cjk> +0x9563 U+82D7 # <cjk> +0x9564 U+9328 # <cjk> +0x9565 U+92F2 # <cjk> +0x9566 U+849C # <cjk> +0x9567 U+86ED # <cjk> +0x9568 U+9C2D # <cjk> +0x9569 U+54C1 # <cjk> +0x956A U+5F6C # <cjk> +0x956B U+658C # <cjk> +0x956C U+6D5C # <cjk> +0x956D U+7015 # <cjk> +0x956E U+8CA7 # <cjk> +0x956F U+8CD3 # <cjk> +0x9570 U+983B # <cjk> +0x9571 U+654F # <cjk> +0x9572 U+74F6 # <cjk> +0x9573 U+4E0D # <cjk> +0x9574 U+4ED8 # <cjk> +0x9575 U+57E0 # <cjk> +0x9576 U+592B # <cjk> +0x9577 U+5A66 # <cjk> +0x9578 U+5BCC # <cjk> +0x9579 U+51A8 # <cjk> +0x957A U+5E03 # <cjk> +0x957B U+5E9C # <cjk> +0x957C U+6016 # <cjk> +0x957D U+6276 # <cjk> +0x957E U+6577 # <cjk> +0x9580 U+65A7 # <cjk> +0x9581 U+666E # <cjk> +0x9582 U+6D6E # <cjk> +0x9583 U+7236 # <cjk> +0x9584 U+7B26 # <cjk> +0x9585 U+8150 # <cjk> +0x9586 U+819A # <cjk> +0x9587 U+8299 # <cjk> +0x9588 U+8B5C # <cjk> +0x9589 U+8CA0 # <cjk> +0x958A U+8CE6 # <cjk> +0x958B U+8D74 # <cjk> +0x958C U+961C # <cjk> +0x958D U+9644 # <cjk> +0x958E U+4FAE # <cjk> +0x958F U+64AB # <cjk> +0x9590 U+6B66 # <cjk> +0x9591 U+821E # <cjk> +0x9592 U+8461 # <cjk> +0x9593 U+856A # <cjk> +0x9594 U+90E8 # <cjk> +0x9595 U+5C01 # <cjk> +0x9596 U+6953 # <cjk> +0x9597 U+98A8 # <cjk> +0x9598 U+847A # <cjk> +0x9599 U+8557 # <cjk> +0x959A U+4F0F # <cjk> +0x959B U+526F # <cjk> +0x959C U+5FA9 # <cjk> +0x959D U+5E45 # <cjk> +0x959E U+670D # <cjk> +0x959F U+798F # <cjk> +0x95A0 U+8179 # <cjk> +0x95A1 U+8907 # <cjk> +0x95A2 U+8986 # <cjk> +0x95A3 U+6DF5 # <cjk> +0x95A4 U+5F17 # <cjk> +0x95A5 U+6255 # <cjk> +0x95A6 U+6CB8 # <cjk> +0x95A7 U+4ECF # <cjk> +0x95A8 U+7269 # <cjk> +0x95A9 U+9B92 # <cjk> +0x95AA U+5206 # <cjk> +0x95AB U+543B # <cjk> +0x95AC U+5674 # <cjk> +0x95AD U+58B3 # <cjk> +0x95AE U+61A4 # <cjk> +0x95AF U+626E # <cjk> +0x95B0 U+711A # <cjk> +0x95B1 U+596E # <cjk> +0x95B2 U+7C89 # <cjk> +0x95B3 U+7CDE # <cjk> +0x95B4 U+7D1B # <cjk> +0x95B5 U+96F0 # <cjk> +0x95B6 U+6587 # <cjk> +0x95B7 U+805E # <cjk> +0x95B8 U+4E19 # <cjk> +0x95B9 U+4F75 # <cjk> +0x95BA U+5175 # <cjk> +0x95BB U+5840 # <cjk> +0x95BC U+5E63 # <cjk> +0x95BD U+5E73 # <cjk> +0x95BE U+5F0A # <cjk> +0x95BF U+67C4 # <cjk> +0x95C0 U+4E26 # <cjk> +0x95C1 U+853D # <cjk> +0x95C2 U+9589 # <cjk> +0x95C3 U+965B # <cjk> +0x95C4 U+7C73 # <cjk> +0x95C5 U+9801 # <cjk> +0x95C6 U+50FB # <cjk> +0x95C7 U+58C1 # <cjk> +0x95C8 U+7656 # <cjk> +0x95C9 U+78A7 # <cjk> +0x95CA U+5225 # <cjk> +0x95CB U+77A5 # <cjk> +0x95CC U+8511 # <cjk> +0x95CD U+7B86 # <cjk> +0x95CE U+504F # <cjk> +0x95CF U+5909 # <cjk> +0x95D0 U+7247 # <cjk> +0x95D1 U+7BC7 # <cjk> +0x95D2 U+7DE8 # <cjk> +0x95D3 U+8FBA # <cjk> +0x95D4 U+8FD4 # <cjk> +0x95D5 U+904D # <cjk> +0x95D6 U+4FBF # <cjk> +0x95D7 U+52C9 # <cjk> +0x95D8 U+5A29 # <cjk> +0x95D9 U+5F01 # <cjk> +0x95DA U+97AD # <cjk> +0x95DB U+4FDD # <cjk> +0x95DC U+8217 # <cjk> +0x95DD U+92EA # <cjk> +0x95DE U+5703 # <cjk> +0x95DF U+6355 # <cjk> +0x95E0 U+6B69 # <cjk> +0x95E1 U+752B # <cjk> +0x95E2 U+88DC # <cjk> +0x95E3 U+8F14 # <cjk> +0x95E4 U+7A42 # <cjk> +0x95E5 U+52DF # <cjk> +0x95E6 U+5893 # <cjk> +0x95E7 U+6155 # <cjk> +0x95E8 U+620A # <cjk> +0x95E9 U+66AE # <cjk> +0x95EA U+6BCD # <cjk> +0x95EB U+7C3F # <cjk> +0x95EC U+83E9 # <cjk> +0x95ED U+5023 # <cjk> +0x95EE U+4FF8 # <cjk> +0x95EF U+5305 # <cjk> +0x95F0 U+5446 # <cjk> +0x95F1 U+5831 # <cjk> +0x95F2 U+5949 # <cjk> +0x95F3 U+5B9D # <cjk> +0x95F4 U+5CF0 # <cjk> +0x95F5 U+5CEF # <cjk> +0x95F6 U+5D29 # <cjk> +0x95F7 U+5E96 # <cjk> +0x95F8 U+62B1 # <cjk> +0x95F9 U+6367 # <cjk> +0x95FA U+653E # <cjk> +0x95FB U+65B9 # <cjk> +0x95FC U+670B # <cjk> +0x9640 U+6CD5 # <cjk> +0x9641 U+6CE1 # <cjk> +0x9642 U+70F9 # <cjk> +0x9643 U+7832 # <cjk> +0x9644 U+7E2B # <cjk> +0x9645 U+80DE # <cjk> +0x9646 U+82B3 # <cjk> +0x9647 U+840C # <cjk> +0x9648 U+84EC # <cjk> +0x9649 U+8702 # <cjk> +0x964A U+8912 # <cjk> +0x964B U+8A2A # <cjk> +0x964C U+8C4A # <cjk> +0x964D U+90A6 # <cjk> +0x964E U+92D2 # <cjk> +0x964F U+98FD # <cjk> +0x9650 U+9CF3 # <cjk> +0x9651 U+9D6C # <cjk> +0x9652 U+4E4F # <cjk> +0x9653 U+4EA1 # <cjk> +0x9654 U+508D # <cjk> +0x9655 U+5256 # <cjk> +0x9656 U+574A # <cjk> +0x9657 U+59A8 # <cjk> +0x9658 U+5E3D # <cjk> +0x9659 U+5FD8 # <cjk> +0x965A U+5FD9 # <cjk> +0x965B U+623F # <cjk> +0x965C U+66B4 # <cjk> +0x965D U+671B # <cjk> +0x965E U+67D0 # <cjk> +0x965F U+68D2 # <cjk> +0x9660 U+5192 # <cjk> +0x9661 U+7D21 # <cjk> +0x9662 U+80AA # <cjk> +0x9663 U+81A8 # <cjk> +0x9664 U+8B00 # <cjk> +0x9665 U+8C8C # <cjk> +0x9666 U+8CBF # <cjk> +0x9667 U+927E # <cjk> +0x9668 U+9632 # <cjk> +0x9669 U+5420 # <cjk> +0x966A U+982C # <cjk> +0x966B U+5317 # <cjk> +0x966C U+50D5 # <cjk> +0x966D U+535C # <cjk> +0x966E U+58A8 # <cjk> +0x966F U+64B2 # <cjk> +0x9670 U+6734 # <cjk> +0x9671 U+7267 # <cjk> +0x9672 U+7766 # <cjk> +0x9673 U+7A46 # <cjk> +0x9674 U+91E6 # <cjk> +0x9675 U+52C3 # <cjk> +0x9676 U+6CA1 # <cjk> +0x9677 U+6B86 # <cjk> +0x9678 U+5800 # <cjk> +0x9679 U+5E4C # <cjk> +0x967A U+5954 # <cjk> +0x967B U+672C # <cjk> +0x967C U+7FFB # <cjk> +0x967D U+51E1 # <cjk> +0x967E U+76C6 # <cjk> +0x9680 U+6469 # <cjk> +0x9681 U+78E8 # <cjk> +0x9682 U+9B54 # <cjk> +0x9683 U+9EBB # <cjk> +0x9684 U+57CB # <cjk> +0x9685 U+59B9 # <cjk> +0x9686 U+6627 # <cjk> +0x9687 U+679A # <cjk> +0x9688 U+6BCE # <cjk> +0x9689 U+54E9 # <cjk> +0x968A U+69D9 # <cjk> +0x968B U+5E55 # <cjk> +0x968C U+819C # <cjk> +0x968D U+6795 # <cjk> +0x968E U+9BAA # <cjk> +0x968F U+67FE # <cjk> +0x9690 U+9C52 # <cjk> +0x9691 U+685D # <cjk> +0x9692 U+4EA6 # <cjk> +0x9693 U+4FE3 # <cjk> +0x9694 U+53C8 # <cjk> +0x9695 U+62B9 # <cjk> +0x9696 U+672B # <cjk> +0x9697 U+6CAB # <cjk> +0x9698 U+8FC4 # <cjk> +0x9699 U+4FAD # <cjk> +0x969A U+7E6D # <cjk> +0x969B U+9EBF # <cjk> +0x969C U+4E07 # <cjk> +0x969D U+6162 # <cjk> +0x969E U+6E80 # <cjk> +0x969F U+6F2B # <cjk> +0x96A0 U+8513 # <cjk> +0x96A1 U+5473 # <cjk> +0x96A2 U+672A # <cjk> +0x96A3 U+9B45 # <cjk> +0x96A4 U+5DF3 # <cjk> +0x96A5 U+7B95 # <cjk> +0x96A6 U+5CAC # <cjk> +0x96A7 U+5BC6 # <cjk> +0x96A8 U+871C # <cjk> +0x96A9 U+6E4A # <cjk> +0x96AA U+84D1 # <cjk> +0x96AB U+7A14 # <cjk> +0x96AC U+8108 # <cjk> +0x96AD U+5999 # <cjk> +0x96AE U+7C8D # <cjk> +0x96AF U+6C11 # <cjk> +0x96B0 U+7720 # <cjk> +0x96B1 U+52D9 # <cjk> +0x96B2 U+5922 # <cjk> +0x96B3 U+7121 # <cjk> +0x96B4 U+725F # <cjk> +0x96B5 U+77DB # <cjk> +0x96B6 U+9727 # <cjk> +0x96B7 U+9D61 # <cjk> +0x96B8 U+690B # <cjk> +0x96B9 U+5A7F # <cjk> +0x96BA U+5A18 # <cjk> +0x96BB U+51A5 # <cjk> +0x96BC U+540D # <cjk> +0x96BD U+547D # <cjk> +0x96BE U+660E # <cjk> +0x96BF U+76DF # <cjk> +0x96C0 U+8FF7 # <cjk> +0x96C1 U+9298 # <cjk> +0x96C2 U+9CF4 # <cjk> +0x96C3 U+59EA # <cjk> +0x96C4 U+725D # <cjk> +0x96C5 U+6EC5 # <cjk> +0x96C6 U+514D # <cjk> +0x96C7 U+68C9 # <cjk> +0x96C8 U+7DBF # <cjk> +0x96C9 U+7DEC # <cjk> +0x96CA U+9762 # <cjk> +0x96CB U+9EBA # <cjk> +0x96CC U+6478 # <cjk> +0x96CD U+6A21 # <cjk> +0x96CE U+8302 # <cjk> +0x96CF U+5984 # <cjk> +0x96D0 U+5B5F # <cjk> +0x96D1 U+6BDB # <cjk> +0x96D2 U+731B # <cjk> +0x96D3 U+76F2 # <cjk> +0x96D4 U+7DB2 # <cjk> +0x96D5 U+8017 # <cjk> +0x96D6 U+8499 # <cjk> +0x96D7 U+5132 # <cjk> +0x96D8 U+6728 # <cjk> +0x96D9 U+9ED9 # <cjk> +0x96DA U+76EE # <cjk> +0x96DB U+6762 # <cjk> +0x96DC U+52FF # <cjk> +0x96DD U+9905 # <cjk> +0x96DE U+5C24 # <cjk> +0x96DF U+623B # <cjk> +0x96E0 U+7C7E # <cjk> +0x96E1 U+8CB0 # <cjk> +0x96E2 U+554F # <cjk> +0x96E3 U+60B6 # <cjk> +0x96E4 U+7D0B # <cjk> +0x96E5 U+9580 # <cjk> +0x96E6 U+5301 # <cjk> +0x96E7 U+4E5F # <cjk> +0x96E8 U+51B6 # <cjk> +0x96E9 U+591C # <cjk> +0x96EA U+723A # <cjk> +0x96EB U+8036 # <cjk> +0x96EC U+91CE # <cjk> +0x96ED U+5F25 # <cjk> +0x96EE U+77E2 # <cjk> +0x96EF U+5384 # <cjk> +0x96F0 U+5F79 # <cjk> +0x96F1 U+7D04 # <cjk> +0x96F2 U+85AC # <cjk> +0x96F3 U+8A33 # <cjk> +0x96F4 U+8E8D # <cjk> +0x96F5 U+9756 # <cjk> +0x96F6 U+67F3 # <cjk> +0x96F7 U+85AE # <cjk> +0x96F8 U+9453 # <cjk> +0x96F9 U+6109 # <cjk> +0x96FA U+6108 # <cjk> +0x96FB U+6CB9 # <cjk> +0x96FC U+7652 # <cjk> +0x9740 U+8AED # <cjk> +0x9741 U+8F38 # <cjk> +0x9742 U+552F # <cjk> +0x9743 U+4F51 # <cjk> +0x9744 U+512A # <cjk> +0x9745 U+52C7 # <cjk> +0x9746 U+53CB # <cjk> +0x9747 U+5BA5 # <cjk> +0x9748 U+5E7D # <cjk> +0x9749 U+60A0 # <cjk> +0x974A U+6182 # <cjk> +0x974B U+63D6 # <cjk> +0x974C U+6709 # <cjk> +0x974D U+67DA # <cjk> +0x974E U+6E67 # <cjk> +0x974F U+6D8C # <cjk> +0x9750 U+7336 # <cjk> +0x9751 U+7337 # <cjk> +0x9752 U+7531 # <cjk> +0x9753 U+7950 # <cjk> +0x9754 U+88D5 # <cjk> +0x9755 U+8A98 # <cjk> +0x9756 U+904A # <cjk> +0x9757 U+9091 # <cjk> +0x9758 U+90F5 # <cjk> +0x9759 U+96C4 # <cjk> +0x975A U+878D # <cjk> +0x975B U+5915 # <cjk> +0x975C U+4E88 # <cjk> +0x975D U+4F59 # <cjk> +0x975E U+4E0E # <cjk> +0x975F U+8A89 # <cjk> +0x9760 U+8F3F # <cjk> +0x9761 U+9810 # <cjk> +0x9762 U+50AD # <cjk> +0x9763 U+5E7C # <cjk> +0x9764 U+5996 # <cjk> +0x9765 U+5BB9 # <cjk> +0x9766 U+5EB8 # <cjk> +0x9767 U+63DA # <cjk> +0x9768 U+63FA # <cjk> +0x9769 U+64C1 # <cjk> +0x976A U+66DC # <cjk> +0x976B U+694A # <cjk> +0x976C U+69D8 # <cjk> +0x976D U+6D0B # <cjk> +0x976E U+6EB6 # <cjk> +0x976F U+7194 # <cjk> +0x9770 U+7528 # <cjk> +0x9771 U+7AAF # <cjk> +0x9772 U+7F8A # <cjk> +0x9773 U+8000 # <cjk> +0x9774 U+8449 # <cjk> +0x9775 U+84C9 # <cjk> +0x9776 U+8981 # <cjk> +0x9777 U+8B21 # <cjk> +0x9778 U+8E0A # <cjk> +0x9779 U+9065 # <cjk> +0x977A U+967D # <cjk> +0x977B U+990A # <cjk> +0x977C U+617E # <cjk> +0x977D U+6291 # <cjk> +0x977E U+6B32 # <cjk> +0x9780 U+6C83 # <cjk> +0x9781 U+6D74 # <cjk> +0x9782 U+7FCC # <cjk> +0x9783 U+7FFC # <cjk> +0x9784 U+6DC0 # <cjk> +0x9785 U+7F85 # <cjk> +0x9786 U+87BA # <cjk> +0x9787 U+88F8 # <cjk> +0x9788 U+6765 # <cjk> +0x9789 U+83B1 # <cjk> +0x978A U+983C # <cjk> +0x978B U+96F7 # <cjk> +0x978C U+6D1B # <cjk> +0x978D U+7D61 # <cjk> +0x978E U+843D # <cjk> +0x978F U+916A # <cjk> +0x9790 U+4E71 # <cjk> +0x9791 U+5375 # <cjk> +0x9792 U+5D50 # <cjk> +0x9793 U+6B04 # <cjk> +0x9794 U+6FEB # <cjk> +0x9795 U+85CD # <cjk> +0x9796 U+862D # <cjk> +0x9797 U+89A7 # <cjk> +0x9798 U+5229 # <cjk> +0x9799 U+540F # <cjk> +0x979A U+5C65 # <cjk> +0x979B U+674E # <cjk> +0x979C U+68A8 # <cjk> +0x979D U+7406 # <cjk> +0x979E U+7483 # <cjk> +0x979F U+75E2 # <cjk> +0x97A0 U+88CF # <cjk> +0x97A1 U+88E1 # <cjk> +0x97A2 U+91CC # <cjk> +0x97A3 U+96E2 # <cjk> +0x97A4 U+9678 # <cjk> +0x97A5 U+5F8B # <cjk> +0x97A6 U+7387 # <cjk> +0x97A7 U+7ACB # <cjk> +0x97A8 U+844E # <cjk> +0x97A9 U+63A0 # <cjk> +0x97AA U+7565 # <cjk> +0x97AB U+5289 # <cjk> +0x97AC U+6D41 # <cjk> +0x97AD U+6E9C # <cjk> +0x97AE U+7409 # <cjk> +0x97AF U+7559 # <cjk> +0x97B0 U+786B # <cjk> +0x97B1 U+7C92 # <cjk> +0x97B2 U+9686 # <cjk> +0x97B3 U+7ADC # <cjk> +0x97B4 U+9F8D # <cjk> +0x97B5 U+4FB6 # <cjk> +0x97B6 U+616E # <cjk> +0x97B7 U+65C5 # <cjk> +0x97B8 U+865C # <cjk> +0x97B9 U+4E86 # <cjk> +0x97BA U+4EAE # <cjk> +0x97BB U+50DA # <cjk> +0x97BC U+4E21 # <cjk> +0x97BD U+51CC # <cjk> +0x97BE U+5BEE # <cjk> +0x97BF U+6599 # <cjk> +0x97C0 U+6881 # <cjk> +0x97C1 U+6DBC # <cjk> +0x97C2 U+731F # <cjk> +0x97C3 U+7642 # <cjk> +0x97C4 U+77AD # <cjk> +0x97C5 U+7A1C # <cjk> +0x97C6 U+7CE7 # <cjk> +0x97C7 U+826F # <cjk> +0x97C8 U+8AD2 # <cjk> +0x97C9 U+907C # <cjk> +0x97CA U+91CF # <cjk> +0x97CB U+9675 # <cjk> +0x97CC U+9818 # <cjk> +0x97CD U+529B # <cjk> +0x97CE U+7DD1 # <cjk> +0x97CF U+502B # <cjk> +0x97D0 U+5398 # <cjk> +0x97D1 U+6797 # <cjk> +0x97D2 U+6DCB # <cjk> +0x97D3 U+71D0 # <cjk> +0x97D4 U+7433 # <cjk> +0x97D5 U+81E8 # <cjk> +0x97D6 U+8F2A # <cjk> +0x97D7 U+96A3 # <cjk> +0x97D8 U+9C57 # <cjk> +0x97D9 U+9E9F # <cjk> +0x97DA U+7460 # <cjk> +0x97DB U+5841 # <cjk> +0x97DC U+6D99 # <cjk> +0x97DD U+7D2F # <cjk> +0x97DE U+985E # <cjk> +0x97DF U+4EE4 # <cjk> +0x97E0 U+4F36 # <cjk> +0x97E1 U+4F8B # <cjk> +0x97E2 U+51B7 # <cjk> +0x97E3 U+52B1 # <cjk> +0x97E4 U+5DBA # <cjk> +0x97E5 U+601C # <cjk> +0x97E6 U+73B2 # <cjk> +0x97E7 U+793C # <cjk> +0x97E8 U+82D3 # <cjk> +0x97E9 U+9234 # <cjk> +0x97EA U+96B7 # <cjk> +0x97EB U+96F6 # <cjk> +0x97EC U+970A # <cjk> +0x97ED U+9E97 # <cjk> +0x97EE U+9F62 # <cjk> +0x97EF U+66A6 # <cjk> +0x97F0 U+6B74 # <cjk> +0x97F1 U+5217 # <cjk> +0x97F2 U+52A3 # <cjk> +0x97F3 U+70C8 # <cjk> +0x97F4 U+88C2 # <cjk> +0x97F5 U+5EC9 # <cjk> +0x97F6 U+604B # <cjk> +0x97F7 U+6190 # <cjk> +0x97F8 U+6F23 # <cjk> +0x97F9 U+7149 # <cjk> +0x97FA U+7C3E # <cjk> +0x97FB U+7DF4 # <cjk> +0x97FC U+806F # <cjk> +0x9840 U+84EE # <cjk> +0x9841 U+9023 # <cjk> +0x9842 U+932C # <cjk> +0x9843 U+5442 # <cjk> +0x9844 U+9B6F # <cjk> +0x9845 U+6AD3 # <cjk> +0x9846 U+7089 # <cjk> +0x9847 U+8CC2 # <cjk> +0x9848 U+8DEF # <cjk> +0x9849 U+9732 # <cjk> +0x984A U+52B4 # <cjk> +0x984B U+5A41 # <cjk> +0x984C U+5ECA # <cjk> +0x984D U+5F04 # <cjk> +0x984E U+6717 # <cjk> +0x984F U+697C # <cjk> +0x9850 U+6994 # <cjk> +0x9851 U+6D6A # <cjk> +0x9852 U+6F0F # <cjk> +0x9853 U+7262 # <cjk> +0x9854 U+72FC # <cjk> +0x9855 U+7BED # <cjk> +0x9856 U+8001 # <cjk> +0x9857 U+807E # <cjk> +0x9858 U+874B # <cjk> +0x9859 U+90CE # <cjk> +0x985A U+516D # <cjk> +0x985B U+9E93 # <cjk> +0x985C U+7984 # <cjk> +0x985D U+808B # <cjk> +0x985E U+9332 # <cjk> +0x985F U+8AD6 # <cjk> +0x9860 U+502D # <cjk> +0x9861 U+548C # <cjk> +0x9862 U+8A71 # <cjk> +0x9863 U+6B6A # <cjk> +0x9864 U+8CC4 # <cjk> +0x9865 U+8107 # <cjk> +0x9866 U+60D1 # <cjk> +0x9867 U+67A0 # <cjk> +0x9868 U+9DF2 # <cjk> +0x9869 U+4E99 # <cjk> +0x986A U+4E98 # <cjk> +0x986B U+9C10 # <cjk> +0x986C U+8A6B # <cjk> +0x986D U+85C1 # <cjk> +0x986E U+8568 # <cjk> +0x986F U+6900 # <cjk> +0x9870 U+6E7E # <cjk> +0x9871 U+7897 # <cjk> +0x9872 U+8155 # <cjk> +0x9873 U+20B9F # <cjk> [2004] [Unicode3.1] +0x9874 U+5B41 # <cjk> [2000] +0x9875 U+5B56 # <cjk> [2000] +0x9876 U+5B7D # <cjk> [2000] +0x9877 U+5B93 # <cjk> [2000] +0x9878 U+5BD8 # <cjk> [2000] +0x9879 U+5BEC # <cjk> [2000] +0x987A U+5C12 # <cjk> [2000] +0x987B U+5C1E # <cjk> [2000] +0x987C U+5C23 # <cjk> [2000] +0x987D U+5C2B # <cjk> [2000] +0x987E U+378D # <cjk> [2000] +0x9880 U+5C62 # <cjk> [2000] +0x9881 U+FA3B # CJK COMPATIBILITY IDEOGRAPH-FA3B [2000] [Unicode3.2] +0x9882 U+FA3C # CJK COMPATIBILITY IDEOGRAPH-FA3C [2000] [Unicode3.2] +0x9883 U+216B4 # <cjk> [2000] [Unicode3.1] +0x9884 U+5C7A # <cjk> [2000] +0x9885 U+5C8F # <cjk> [2000] +0x9886 U+5C9F # <cjk> [2000] +0x9887 U+5CA3 # <cjk> [2000] +0x9888 U+5CAA # <cjk> [2000] +0x9889 U+5CBA # <cjk> [2000] +0x988A U+5CCB # <cjk> [2000] +0x988B U+5CD0 # <cjk> [2000] +0x988C U+5CD2 # <cjk> [2000] +0x988D U+5CF4 # <cjk> [2000] +0x988E U+21E34 # <cjk> [2000] [Unicode3.1] +0x988F U+37E2 # <cjk> [2000] +0x9890 U+5D0D # <cjk> [2000] +0x9891 U+5D27 # <cjk> [2000] +0x9892 U+FA11 # CJK COMPATIBILITY IDEOGRAPH-FA11 [2000] +0x9893 U+5D46 # <cjk> [2000] +0x9894 U+5D47 # <cjk> [2000] +0x9895 U+5D53 # <cjk> [2000] +0x9896 U+5D4A # <cjk> [2000] +0x9897 U+5D6D # <cjk> [2000] +0x9898 U+5D81 # <cjk> [2000] +0x9899 U+5DA0 # <cjk> [2000] +0x989A U+5DA4 # <cjk> [2000] +0x989B U+5DA7 # <cjk> [2000] +0x989C U+5DB8 # <cjk> [2000] +0x989D U+5DCB # <cjk> [2000] +0x989E U+541E # <cjk> [2004] +0x989F U+5F0C # <cjk> +0x98A0 U+4E10 # <cjk> +0x98A1 U+4E15 # <cjk> +0x98A2 U+4E2A # <cjk> +0x98A3 U+4E31 # <cjk> +0x98A4 U+4E36 # <cjk> +0x98A5 U+4E3C # <cjk> +0x98A6 U+4E3F # <cjk> +0x98A7 U+4E42 # <cjk> +0x98A8 U+4E56 # <cjk> +0x98A9 U+4E58 # <cjk> +0x98AA U+4E82 # <cjk> +0x98AB U+4E85 # <cjk> +0x98AC U+8C6B # <cjk> +0x98AD U+4E8A # <cjk> +0x98AE U+8212 # <cjk> +0x98AF U+5F0D # <cjk> +0x98B0 U+4E8E # <cjk> +0x98B1 U+4E9E # <cjk> +0x98B2 U+4E9F # <cjk> +0x98B3 U+4EA0 # <cjk> +0x98B4 U+4EA2 # <cjk> +0x98B5 U+4EB0 # <cjk> +0x98B6 U+4EB3 # <cjk> +0x98B7 U+4EB6 # <cjk> +0x98B8 U+4ECE # <cjk> +0x98B9 U+4ECD # <cjk> +0x98BA U+4EC4 # <cjk> +0x98BB U+4EC6 # <cjk> +0x98BC U+4EC2 # <cjk> +0x98BD U+4ED7 # <cjk> +0x98BE U+4EDE # <cjk> +0x98BF U+4EED # <cjk> +0x98C0 U+4EDF # <cjk> +0x98C1 U+4EF7 # <cjk> +0x98C2 U+4F09 # <cjk> +0x98C3 U+4F5A # <cjk> +0x98C4 U+4F30 # <cjk> +0x98C5 U+4F5B # <cjk> +0x98C6 U+4F5D # <cjk> +0x98C7 U+4F57 # <cjk> +0x98C8 U+4F47 # <cjk> +0x98C9 U+4F76 # <cjk> +0x98CA U+4F88 # <cjk> +0x98CB U+4F8F # <cjk> +0x98CC U+4F98 # <cjk> +0x98CD U+4F7B # <cjk> +0x98CE U+4F69 # <cjk> +0x98CF U+4F70 # <cjk> +0x98D0 U+4F91 # <cjk> +0x98D1 U+4F6F # <cjk> +0x98D2 U+4F86 # <cjk> +0x98D3 U+4F96 # <cjk> +0x98D4 U+5118 # <cjk> +0x98D5 U+4FD4 # <cjk> +0x98D6 U+4FDF # <cjk> +0x98D7 U+4FCE # <cjk> +0x98D8 U+4FD8 # <cjk> +0x98D9 U+4FDB # <cjk> +0x98DA U+4FD1 # <cjk> +0x98DB U+4FDA # <cjk> +0x98DC U+4FD0 # <cjk> +0x98DD U+4FE4 # <cjk> +0x98DE U+4FE5 # <cjk> +0x98DF U+501A # <cjk> +0x98E0 U+5028 # <cjk> +0x98E1 U+5014 # <cjk> +0x98E2 U+502A # <cjk> +0x98E3 U+5025 # <cjk> +0x98E4 U+5005 # <cjk> +0x98E5 U+4F1C # <cjk> +0x98E6 U+4FF6 # <cjk> +0x98E7 U+5021 # <cjk> +0x98E8 U+5029 # <cjk> +0x98E9 U+502C # <cjk> +0x98EA U+4FFE # <cjk> +0x98EB U+4FEF # <cjk> +0x98EC U+5011 # <cjk> +0x98ED U+5006 # <cjk> +0x98EE U+5043 # <cjk> +0x98EF U+5047 # <cjk> +0x98F0 U+6703 # <cjk> +0x98F1 U+5055 # <cjk> +0x98F2 U+5050 # <cjk> +0x98F3 U+5048 # <cjk> +0x98F4 U+505A # <cjk> +0x98F5 U+5056 # <cjk> +0x98F6 U+506C # <cjk> +0x98F7 U+5078 # <cjk> +0x98F8 U+5080 # <cjk> +0x98F9 U+509A # <cjk> +0x98FA U+5085 # <cjk> +0x98FB U+50B4 # <cjk> +0x98FC U+50B2 # <cjk> +0x9940 U+50C9 # <cjk> +0x9941 U+50CA # <cjk> +0x9942 U+50B3 # <cjk> +0x9943 U+50C2 # <cjk> +0x9944 U+50D6 # <cjk> +0x9945 U+50DE # <cjk> +0x9946 U+50E5 # <cjk> +0x9947 U+50ED # <cjk> +0x9948 U+50E3 # <cjk> +0x9949 U+50EE # <cjk> +0x994A U+50F9 # <cjk> +0x994B U+50F5 # <cjk> +0x994C U+5109 # <cjk> +0x994D U+5101 # <cjk> +0x994E U+5102 # <cjk> +0x994F U+5116 # <cjk> +0x9950 U+5115 # <cjk> +0x9951 U+5114 # <cjk> +0x9952 U+511A # <cjk> +0x9953 U+5121 # <cjk> +0x9954 U+513A # <cjk> +0x9955 U+5137 # <cjk> +0x9956 U+513C # <cjk> +0x9957 U+513B # <cjk> +0x9958 U+513F # <cjk> +0x9959 U+5140 # <cjk> +0x995A U+5152 # <cjk> +0x995B U+514C # <cjk> +0x995C U+5154 # <cjk> +0x995D U+5162 # <cjk> +0x995E U+7AF8 # <cjk> +0x995F U+5169 # <cjk> +0x9960 U+516A # <cjk> +0x9961 U+516E # <cjk> +0x9962 U+5180 # <cjk> +0x9963 U+5182 # <cjk> +0x9964 U+56D8 # <cjk> +0x9965 U+518C # <cjk> +0x9966 U+5189 # <cjk> +0x9967 U+518F # <cjk> +0x9968 U+5191 # <cjk> +0x9969 U+5193 # <cjk> +0x996A U+5195 # <cjk> +0x996B U+5196 # <cjk> +0x996C U+51A4 # <cjk> +0x996D U+51A6 # <cjk> +0x996E U+51A2 # <cjk> +0x996F U+51A9 # <cjk> +0x9970 U+51AA # <cjk> +0x9971 U+51AB # <cjk> +0x9972 U+51B3 # <cjk> +0x9973 U+51B1 # <cjk> +0x9974 U+51B2 # <cjk> +0x9975 U+51B0 # <cjk> +0x9976 U+51B5 # <cjk> +0x9977 U+51BD # <cjk> +0x9978 U+51C5 # <cjk> +0x9979 U+51C9 # <cjk> +0x997A U+51DB # <cjk> +0x997B U+51E0 # <cjk> +0x997C U+8655 # <cjk> +0x997D U+51E9 # <cjk> +0x997E U+51ED # <cjk> +0x9980 U+51F0 # <cjk> +0x9981 U+51F5 # <cjk> +0x9982 U+51FE # <cjk> +0x9983 U+5204 # <cjk> +0x9984 U+520B # <cjk> +0x9985 U+5214 # <cjk> +0x9986 U+520E # <cjk> +0x9987 U+5227 # <cjk> +0x9988 U+522A # <cjk> +0x9989 U+522E # <cjk> +0x998A U+5233 # <cjk> +0x998B U+5239 # <cjk> +0x998C U+524F # <cjk> +0x998D U+5244 # <cjk> +0x998E U+524B # <cjk> +0x998F U+524C # <cjk> +0x9990 U+525E # <cjk> +0x9991 U+5254 # <cjk> +0x9992 U+526A # <cjk> +0x9993 U+5274 # <cjk> +0x9994 U+5269 # <cjk> +0x9995 U+5273 # <cjk> +0x9996 U+527F # <cjk> +0x9997 U+527D # <cjk> +0x9998 U+528D # <cjk> +0x9999 U+5294 # <cjk> +0x999A U+5292 # <cjk> +0x999B U+5271 # <cjk> +0x999C U+5288 # <cjk> +0x999D U+5291 # <cjk> +0x999E U+8FA8 # <cjk> +0x999F U+8FA7 # <cjk> +0x99A0 U+52AC # <cjk> +0x99A1 U+52AD # <cjk> +0x99A2 U+52BC # <cjk> +0x99A3 U+52B5 # <cjk> +0x99A4 U+52C1 # <cjk> +0x99A5 U+52CD # <cjk> +0x99A6 U+52D7 # <cjk> +0x99A7 U+52DE # <cjk> +0x99A8 U+52E3 # <cjk> +0x99A9 U+52E6 # <cjk> +0x99AA U+98ED # <cjk> +0x99AB U+52E0 # <cjk> +0x99AC U+52F3 # <cjk> +0x99AD U+52F5 # <cjk> +0x99AE U+52F8 # <cjk> +0x99AF U+52F9 # <cjk> +0x99B0 U+5306 # <cjk> +0x99B1 U+5308 # <cjk> +0x99B2 U+7538 # <cjk> +0x99B3 U+530D # <cjk> +0x99B4 U+5310 # <cjk> +0x99B5 U+530F # <cjk> +0x99B6 U+5315 # <cjk> +0x99B7 U+531A # <cjk> +0x99B8 U+5323 # <cjk> +0x99B9 U+532F # <cjk> +0x99BA U+5331 # <cjk> +0x99BB U+5333 # <cjk> +0x99BC U+5338 # <cjk> +0x99BD U+5340 # <cjk> +0x99BE U+5346 # <cjk> +0x99BF U+5345 # <cjk> +0x99C0 U+4E17 # <cjk> +0x99C1 U+5349 # <cjk> +0x99C2 U+534D # <cjk> +0x99C3 U+51D6 # <cjk> +0x99C4 U+535E # <cjk> +0x99C5 U+5369 # <cjk> +0x99C6 U+536E # <cjk> +0x99C7 U+5918 # <cjk> +0x99C8 U+537B # <cjk> +0x99C9 U+5377 # <cjk> +0x99CA U+5382 # <cjk> +0x99CB U+5396 # <cjk> +0x99CC U+53A0 # <cjk> +0x99CD U+53A6 # <cjk> +0x99CE U+53A5 # <cjk> +0x99CF U+53AE # <cjk> +0x99D0 U+53B0 # <cjk> +0x99D1 U+53B6 # <cjk> +0x99D2 U+53C3 # <cjk> +0x99D3 U+7C12 # <cjk> +0x99D4 U+96D9 # <cjk> +0x99D5 U+53DF # <cjk> +0x99D6 U+66FC # <cjk> +0x99D7 U+71EE # <cjk> +0x99D8 U+53EE # <cjk> +0x99D9 U+53E8 # <cjk> +0x99DA U+53ED # <cjk> +0x99DB U+53FA # <cjk> +0x99DC U+5401 # <cjk> +0x99DD U+543D # <cjk> +0x99DE U+5440 # <cjk> +0x99DF U+542C # <cjk> +0x99E0 U+542D # <cjk> +0x99E1 U+543C # <cjk> +0x99E2 U+542E # <cjk> +0x99E3 U+5436 # <cjk> +0x99E4 U+5429 # <cjk> +0x99E5 U+541D # <cjk> +0x99E6 U+544E # <cjk> +0x99E7 U+548F # <cjk> +0x99E8 U+5475 # <cjk> +0x99E9 U+548E # <cjk> +0x99EA U+545F # <cjk> +0x99EB U+5471 # <cjk> +0x99EC U+5477 # <cjk> +0x99ED U+5470 # <cjk> +0x99EE U+5492 # <cjk> +0x99EF U+547B # <cjk> +0x99F0 U+5480 # <cjk> +0x99F1 U+5476 # <cjk> +0x99F2 U+5484 # <cjk> +0x99F3 U+5490 # <cjk> +0x99F4 U+5486 # <cjk> +0x99F5 U+54C7 # <cjk> +0x99F6 U+54A2 # <cjk> +0x99F7 U+54B8 # <cjk> +0x99F8 U+54A5 # <cjk> +0x99F9 U+54AC # <cjk> +0x99FA U+54C4 # <cjk> +0x99FB U+54C8 # <cjk> +0x99FC U+54A8 # <cjk> +0x9A40 U+54AB # <cjk> +0x9A41 U+54C2 # <cjk> +0x9A42 U+54A4 # <cjk> +0x9A43 U+54BE # <cjk> +0x9A44 U+54BC # <cjk> +0x9A45 U+54D8 # <cjk> +0x9A46 U+54E5 # <cjk> +0x9A47 U+54E6 # <cjk> +0x9A48 U+550F # <cjk> +0x9A49 U+5514 # <cjk> +0x9A4A U+54FD # <cjk> +0x9A4B U+54EE # <cjk> +0x9A4C U+54ED # <cjk> +0x9A4D U+54FA # <cjk> +0x9A4E U+54E2 # <cjk> +0x9A4F U+5539 # <cjk> +0x9A50 U+5540 # <cjk> +0x9A51 U+5563 # <cjk> +0x9A52 U+554C # <cjk> +0x9A53 U+552E # <cjk> +0x9A54 U+555C # <cjk> +0x9A55 U+5545 # <cjk> +0x9A56 U+5556 # <cjk> +0x9A57 U+5557 # <cjk> +0x9A58 U+5538 # <cjk> +0x9A59 U+5533 # <cjk> +0x9A5A U+555D # <cjk> +0x9A5B U+5599 # <cjk> +0x9A5C U+5580 # <cjk> +0x9A5D U+54AF # <cjk> +0x9A5E U+558A # <cjk> +0x9A5F U+559F # <cjk> +0x9A60 U+557B # <cjk> +0x9A61 U+557E # <cjk> +0x9A62 U+5598 # <cjk> +0x9A63 U+559E # <cjk> +0x9A64 U+55AE # <cjk> +0x9A65 U+557C # <cjk> +0x9A66 U+5583 # <cjk> +0x9A67 U+55A9 # <cjk> +0x9A68 U+5587 # <cjk> +0x9A69 U+55A8 # <cjk> +0x9A6A U+55DA # <cjk> +0x9A6B U+55C5 # <cjk> +0x9A6C U+55DF # <cjk> +0x9A6D U+55C4 # <cjk> +0x9A6E U+55DC # <cjk> +0x9A6F U+55E4 # <cjk> +0x9A70 U+55D4 # <cjk> +0x9A71 U+5614 # <cjk> +0x9A72 U+55F7 # <cjk> +0x9A73 U+5616 # <cjk> +0x9A74 U+55FE # <cjk> +0x9A75 U+55FD # <cjk> +0x9A76 U+561B # <cjk> +0x9A77 U+55F9 # <cjk> +0x9A78 U+564E # <cjk> +0x9A79 U+5650 # <cjk> +0x9A7A U+71DF # <cjk> +0x9A7B U+5634 # <cjk> +0x9A7C U+5636 # <cjk> +0x9A7D U+5632 # <cjk> +0x9A7E U+5638 # <cjk> +0x9A80 U+566B # <cjk> +0x9A81 U+5664 # <cjk> +0x9A82 U+562F # <cjk> +0x9A83 U+566C # <cjk> +0x9A84 U+566A # <cjk> +0x9A85 U+5686 # <cjk> +0x9A86 U+5680 # <cjk> +0x9A87 U+568A # <cjk> +0x9A88 U+56A0 # <cjk> +0x9A89 U+5694 # <cjk> +0x9A8A U+568F # <cjk> +0x9A8B U+56A5 # <cjk> +0x9A8C U+56AE # <cjk> +0x9A8D U+56B6 # <cjk> +0x9A8E U+56B4 # <cjk> +0x9A8F U+56C2 # <cjk> +0x9A90 U+56BC # <cjk> +0x9A91 U+56C1 # <cjk> +0x9A92 U+56C3 # <cjk> +0x9A93 U+56C0 # <cjk> +0x9A94 U+56C8 # <cjk> +0x9A95 U+56CE # <cjk> +0x9A96 U+56D1 # <cjk> +0x9A97 U+56D3 # <cjk> +0x9A98 U+56D7 # <cjk> +0x9A99 U+56EE # <cjk> +0x9A9A U+56F9 # <cjk> +0x9A9B U+5700 # <cjk> +0x9A9C U+56FF # <cjk> +0x9A9D U+5704 # <cjk> +0x9A9E U+5709 # <cjk> +0x9A9F U+5708 # <cjk> +0x9AA0 U+570B # <cjk> +0x9AA1 U+570D # <cjk> +0x9AA2 U+5713 # <cjk> +0x9AA3 U+5718 # <cjk> +0x9AA4 U+5716 # <cjk> +0x9AA5 U+55C7 # <cjk> +0x9AA6 U+571C # <cjk> +0x9AA7 U+5726 # <cjk> +0x9AA8 U+5737 # <cjk> +0x9AA9 U+5738 # <cjk> +0x9AAA U+574E # <cjk> +0x9AAB U+573B # <cjk> +0x9AAC U+5740 # <cjk> +0x9AAD U+574F # <cjk> +0x9AAE U+5769 # <cjk> +0x9AAF U+57C0 # <cjk> +0x9AB0 U+5788 # <cjk> +0x9AB1 U+5761 # <cjk> +0x9AB2 U+577F # <cjk> +0x9AB3 U+5789 # <cjk> +0x9AB4 U+5793 # <cjk> +0x9AB5 U+57A0 # <cjk> +0x9AB6 U+57B3 # <cjk> +0x9AB7 U+57A4 # <cjk> +0x9AB8 U+57AA # <cjk> +0x9AB9 U+57B0 # <cjk> +0x9ABA U+57C3 # <cjk> +0x9ABB U+57C6 # <cjk> +0x9ABC U+57D4 # <cjk> +0x9ABD U+57D2 # <cjk> +0x9ABE U+57D3 # <cjk> +0x9ABF U+580A # <cjk> +0x9AC0 U+57D6 # <cjk> +0x9AC1 U+57E3 # <cjk> +0x9AC2 U+580B # <cjk> +0x9AC3 U+5819 # <cjk> +0x9AC4 U+581D # <cjk> +0x9AC5 U+5872 # <cjk> +0x9AC6 U+5821 # <cjk> +0x9AC7 U+5862 # <cjk> +0x9AC8 U+584B # <cjk> +0x9AC9 U+5870 # <cjk> +0x9ACA U+6BC0 # <cjk> +0x9ACB U+5852 # <cjk> +0x9ACC U+583D # <cjk> +0x9ACD U+5879 # <cjk> +0x9ACE U+5885 # <cjk> +0x9ACF U+58B9 # <cjk> +0x9AD0 U+589F # <cjk> +0x9AD1 U+58AB # <cjk> +0x9AD2 U+58BA # <cjk> +0x9AD3 U+58DE # <cjk> +0x9AD4 U+58BB # <cjk> +0x9AD5 U+58B8 # <cjk> +0x9AD6 U+58AE # <cjk> +0x9AD7 U+58C5 # <cjk> +0x9AD8 U+58D3 # <cjk> +0x9AD9 U+58D1 # <cjk> +0x9ADA U+58D7 # <cjk> +0x9ADB U+58D9 # <cjk> +0x9ADC U+58D8 # <cjk> +0x9ADD U+58E5 # <cjk> +0x9ADE U+58DC # <cjk> +0x9ADF U+58E4 # <cjk> +0x9AE0 U+58DF # <cjk> +0x9AE1 U+58EF # <cjk> +0x9AE2 U+58FA # <cjk> +0x9AE3 U+58F9 # <cjk> +0x9AE4 U+58FB # <cjk> +0x9AE5 U+58FC # <cjk> +0x9AE6 U+58FD # <cjk> +0x9AE7 U+5902 # <cjk> +0x9AE8 U+590A # <cjk> +0x9AE9 U+5910 # <cjk> +0x9AEA U+591B # <cjk> +0x9AEB U+68A6 # <cjk> +0x9AEC U+5925 # <cjk> +0x9AED U+592C # <cjk> +0x9AEE U+592D # <cjk> +0x9AEF U+5932 # <cjk> +0x9AF0 U+5938 # <cjk> +0x9AF1 U+593E # <cjk> +0x9AF2 U+7AD2 # <cjk> +0x9AF3 U+5955 # <cjk> +0x9AF4 U+5950 # <cjk> +0x9AF5 U+594E # <cjk> +0x9AF6 U+595A # <cjk> +0x9AF7 U+5958 # <cjk> +0x9AF8 U+5962 # <cjk> +0x9AF9 U+5960 # <cjk> +0x9AFA U+5967 # <cjk> +0x9AFB U+596C # <cjk> +0x9AFC U+5969 # <cjk> +0x9B40 U+5978 # <cjk> +0x9B41 U+5981 # <cjk> +0x9B42 U+599D # <cjk> +0x9B43 U+4F5E # <cjk> +0x9B44 U+4FAB # <cjk> +0x9B45 U+59A3 # <cjk> +0x9B46 U+59B2 # <cjk> +0x9B47 U+59C6 # <cjk> +0x9B48 U+59E8 # <cjk> +0x9B49 U+59DC # <cjk> +0x9B4A U+598D # <cjk> +0x9B4B U+59D9 # <cjk> +0x9B4C U+59DA # <cjk> +0x9B4D U+5A25 # <cjk> +0x9B4E U+5A1F # <cjk> +0x9B4F U+5A11 # <cjk> +0x9B50 U+5A1C # <cjk> +0x9B51 U+5A09 # <cjk> +0x9B52 U+5A1A # <cjk> +0x9B53 U+5A40 # <cjk> +0x9B54 U+5A6C # <cjk> +0x9B55 U+5A49 # <cjk> +0x9B56 U+5A35 # <cjk> +0x9B57 U+5A36 # <cjk> +0x9B58 U+5A62 # <cjk> +0x9B59 U+5A6A # <cjk> +0x9B5A U+5A9A # <cjk> +0x9B5B U+5ABC # <cjk> +0x9B5C U+5ABE # <cjk> +0x9B5D U+5ACB # <cjk> +0x9B5E U+5AC2 # <cjk> +0x9B5F U+5ABD # <cjk> +0x9B60 U+5AE3 # <cjk> +0x9B61 U+5AD7 # <cjk> +0x9B62 U+5AE6 # <cjk> +0x9B63 U+5AE9 # <cjk> +0x9B64 U+5AD6 # <cjk> +0x9B65 U+5AFA # <cjk> +0x9B66 U+5AFB # <cjk> +0x9B67 U+5B0C # <cjk> +0x9B68 U+5B0B # <cjk> +0x9B69 U+5B16 # <cjk> +0x9B6A U+5B32 # <cjk> +0x9B6B U+5AD0 # <cjk> +0x9B6C U+5B2A # <cjk> +0x9B6D U+5B36 # <cjk> +0x9B6E U+5B3E # <cjk> +0x9B6F U+5B43 # <cjk> +0x9B70 U+5B45 # <cjk> +0x9B71 U+5B40 # <cjk> +0x9B72 U+5B51 # <cjk> +0x9B73 U+5B55 # <cjk> +0x9B74 U+5B5A # <cjk> +0x9B75 U+5B5B # <cjk> +0x9B76 U+5B65 # <cjk> +0x9B77 U+5B69 # <cjk> +0x9B78 U+5B70 # <cjk> +0x9B79 U+5B73 # <cjk> +0x9B7A U+5B75 # <cjk> +0x9B7B U+5B78 # <cjk> +0x9B7C U+6588 # <cjk> +0x9B7D U+5B7A # <cjk> +0x9B7E U+5B80 # <cjk> +0x9B80 U+5B83 # <cjk> +0x9B81 U+5BA6 # <cjk> +0x9B82 U+5BB8 # <cjk> +0x9B83 U+5BC3 # <cjk> +0x9B84 U+5BC7 # <cjk> +0x9B85 U+5BC9 # <cjk> +0x9B86 U+5BD4 # <cjk> +0x9B87 U+5BD0 # <cjk> +0x9B88 U+5BE4 # <cjk> +0x9B89 U+5BE6 # <cjk> +0x9B8A U+5BE2 # <cjk> +0x9B8B U+5BDE # <cjk> +0x9B8C U+5BE5 # <cjk> +0x9B8D U+5BEB # <cjk> +0x9B8E U+5BF0 # <cjk> +0x9B8F U+5BF6 # <cjk> +0x9B90 U+5BF3 # <cjk> +0x9B91 U+5C05 # <cjk> +0x9B92 U+5C07 # <cjk> +0x9B93 U+5C08 # <cjk> +0x9B94 U+5C0D # <cjk> +0x9B95 U+5C13 # <cjk> +0x9B96 U+5C20 # <cjk> +0x9B97 U+5C22 # <cjk> +0x9B98 U+5C28 # <cjk> +0x9B99 U+5C38 # <cjk> +0x9B9A U+5C39 # <cjk> +0x9B9B U+5C41 # <cjk> +0x9B9C U+5C46 # <cjk> +0x9B9D U+5C4E # <cjk> +0x9B9E U+5C53 # <cjk> +0x9B9F U+5C50 # <cjk> +0x9BA0 U+5C4F # <cjk> +0x9BA1 U+5B71 # <cjk> +0x9BA2 U+5C6C # <cjk> +0x9BA3 U+5C6E # <cjk> +0x9BA4 U+4E62 # <cjk> +0x9BA5 U+5C76 # <cjk> +0x9BA6 U+5C79 # <cjk> +0x9BA7 U+5C8C # <cjk> +0x9BA8 U+5C91 # <cjk> +0x9BA9 U+5C94 # <cjk> +0x9BAA U+599B # <cjk> +0x9BAB U+5CAB # <cjk> +0x9BAC U+5CBB # <cjk> +0x9BAD U+5CB6 # <cjk> +0x9BAE U+5CBC # <cjk> +0x9BAF U+5CB7 # <cjk> +0x9BB0 U+5CC5 # <cjk> +0x9BB1 U+5CBE # <cjk> +0x9BB2 U+5CC7 # <cjk> +0x9BB3 U+5CD9 # <cjk> +0x9BB4 U+5CE9 # <cjk> +0x9BB5 U+5CFD # <cjk> +0x9BB6 U+5CFA # <cjk> +0x9BB7 U+5CED # <cjk> +0x9BB8 U+5D8C # <cjk> +0x9BB9 U+5CEA # <cjk> +0x9BBA U+5D0B # <cjk> +0x9BBB U+5D15 # <cjk> +0x9BBC U+5D17 # <cjk> +0x9BBD U+5D5C # <cjk> +0x9BBE U+5D1F # <cjk> +0x9BBF U+5D1B # <cjk> +0x9BC0 U+5D11 # <cjk> +0x9BC1 U+5D14 # <cjk> +0x9BC2 U+5D22 # <cjk> +0x9BC3 U+5D1A # <cjk> +0x9BC4 U+5D19 # <cjk> +0x9BC5 U+5D18 # <cjk> +0x9BC6 U+5D4C # <cjk> +0x9BC7 U+5D52 # <cjk> +0x9BC8 U+5D4E # <cjk> +0x9BC9 U+5D4B # <cjk> +0x9BCA U+5D6C # <cjk> +0x9BCB U+5D73 # <cjk> +0x9BCC U+5D76 # <cjk> +0x9BCD U+5D87 # <cjk> +0x9BCE U+5D84 # <cjk> +0x9BCF U+5D82 # <cjk> +0x9BD0 U+5DA2 # <cjk> +0x9BD1 U+5D9D # <cjk> +0x9BD2 U+5DAC # <cjk> +0x9BD3 U+5DAE # <cjk> +0x9BD4 U+5DBD # <cjk> +0x9BD5 U+5D90 # <cjk> +0x9BD6 U+5DB7 # <cjk> +0x9BD7 U+5DBC # <cjk> +0x9BD8 U+5DC9 # <cjk> +0x9BD9 U+5DCD # <cjk> +0x9BDA U+5DD3 # <cjk> +0x9BDB U+5DD2 # <cjk> +0x9BDC U+5DD6 # <cjk> +0x9BDD U+5DDB # <cjk> +0x9BDE U+5DEB # <cjk> +0x9BDF U+5DF2 # <cjk> +0x9BE0 U+5DF5 # <cjk> +0x9BE1 U+5E0B # <cjk> +0x9BE2 U+5E1A # <cjk> +0x9BE3 U+5E19 # <cjk> +0x9BE4 U+5E11 # <cjk> +0x9BE5 U+5E1B # <cjk> +0x9BE6 U+5E36 # <cjk> +0x9BE7 U+5E37 # <cjk> +0x9BE8 U+5E44 # <cjk> +0x9BE9 U+5E43 # <cjk> +0x9BEA U+5E40 # <cjk> +0x9BEB U+5E4E # <cjk> +0x9BEC U+5E57 # <cjk> +0x9BED U+5E54 # <cjk> +0x9BEE U+5E5F # <cjk> +0x9BEF U+5E62 # <cjk> +0x9BF0 U+5E64 # <cjk> +0x9BF1 U+5E47 # <cjk> +0x9BF2 U+5E75 # <cjk> +0x9BF3 U+5E76 # <cjk> +0x9BF4 U+5E7A # <cjk> +0x9BF5 U+9EBC # <cjk> +0x9BF6 U+5E7F # <cjk> +0x9BF7 U+5EA0 # <cjk> +0x9BF8 U+5EC1 # <cjk> +0x9BF9 U+5EC2 # <cjk> +0x9BFA U+5EC8 # <cjk> +0x9BFB U+5ED0 # <cjk> +0x9BFC U+5ECF # <cjk> +0x9C40 U+5ED6 # <cjk> +0x9C41 U+5EE3 # <cjk> +0x9C42 U+5EDD # <cjk> +0x9C43 U+5EDA # <cjk> +0x9C44 U+5EDB # <cjk> +0x9C45 U+5EE2 # <cjk> +0x9C46 U+5EE1 # <cjk> +0x9C47 U+5EE8 # <cjk> +0x9C48 U+5EE9 # <cjk> +0x9C49 U+5EEC # <cjk> +0x9C4A U+5EF1 # <cjk> +0x9C4B U+5EF3 # <cjk> +0x9C4C U+5EF0 # <cjk> +0x9C4D U+5EF4 # <cjk> +0x9C4E U+5EF8 # <cjk> +0x9C4F U+5EFE # <cjk> +0x9C50 U+5F03 # <cjk> +0x9C51 U+5F09 # <cjk> +0x9C52 U+5F5D # <cjk> +0x9C53 U+5F5C # <cjk> +0x9C54 U+5F0B # <cjk> +0x9C55 U+5F11 # <cjk> +0x9C56 U+5F16 # <cjk> +0x9C57 U+5F29 # <cjk> +0x9C58 U+5F2D # <cjk> +0x9C59 U+5F38 # <cjk> +0x9C5A U+5F41 # <cjk> +0x9C5B U+5F48 # <cjk> +0x9C5C U+5F4C # <cjk> +0x9C5D U+5F4E # <cjk> +0x9C5E U+5F2F # <cjk> +0x9C5F U+5F51 # <cjk> +0x9C60 U+5F56 # <cjk> +0x9C61 U+5F57 # <cjk> +0x9C62 U+5F59 # <cjk> +0x9C63 U+5F61 # <cjk> +0x9C64 U+5F6D # <cjk> +0x9C65 U+5F73 # <cjk> +0x9C66 U+5F77 # <cjk> +0x9C67 U+5F83 # <cjk> +0x9C68 U+5F82 # <cjk> +0x9C69 U+5F7F # <cjk> +0x9C6A U+5F8A # <cjk> +0x9C6B U+5F88 # <cjk> +0x9C6C U+5F91 # <cjk> +0x9C6D U+5F87 # <cjk> +0x9C6E U+5F9E # <cjk> +0x9C6F U+5F99 # <cjk> +0x9C70 U+5F98 # <cjk> +0x9C71 U+5FA0 # <cjk> +0x9C72 U+5FA8 # <cjk> +0x9C73 U+5FAD # <cjk> +0x9C74 U+5FBC # <cjk> +0x9C75 U+5FD6 # <cjk> +0x9C76 U+5FFB # <cjk> +0x9C77 U+5FE4 # <cjk> +0x9C78 U+5FF8 # <cjk> +0x9C79 U+5FF1 # <cjk> +0x9C7A U+5FDD # <cjk> +0x9C7B U+60B3 # <cjk> +0x9C7C U+5FFF # <cjk> +0x9C7D U+6021 # <cjk> +0x9C7E U+6060 # <cjk> +0x9C80 U+6019 # <cjk> +0x9C81 U+6010 # <cjk> +0x9C82 U+6029 # <cjk> +0x9C83 U+600E # <cjk> +0x9C84 U+6031 # <cjk> +0x9C85 U+601B # <cjk> +0x9C86 U+6015 # <cjk> +0x9C87 U+602B # <cjk> +0x9C88 U+6026 # <cjk> +0x9C89 U+600F # <cjk> +0x9C8A U+603A # <cjk> +0x9C8B U+605A # <cjk> +0x9C8C U+6041 # <cjk> +0x9C8D U+606A # <cjk> +0x9C8E U+6077 # <cjk> +0x9C8F U+605F # <cjk> +0x9C90 U+604A # <cjk> +0x9C91 U+6046 # <cjk> +0x9C92 U+604D # <cjk> +0x9C93 U+6063 # <cjk> +0x9C94 U+6043 # <cjk> +0x9C95 U+6064 # <cjk> +0x9C96 U+6042 # <cjk> +0x9C97 U+606C # <cjk> +0x9C98 U+606B # <cjk> +0x9C99 U+6059 # <cjk> +0x9C9A U+6081 # <cjk> +0x9C9B U+608D # <cjk> +0x9C9C U+60E7 # <cjk> +0x9C9D U+6083 # <cjk> +0x9C9E U+609A # <cjk> +0x9C9F U+6084 # <cjk> +0x9CA0 U+609B # <cjk> +0x9CA1 U+6096 # <cjk> +0x9CA2 U+6097 # <cjk> +0x9CA3 U+6092 # <cjk> +0x9CA4 U+60A7 # <cjk> +0x9CA5 U+608B # <cjk> +0x9CA6 U+60E1 # <cjk> +0x9CA7 U+60B8 # <cjk> +0x9CA8 U+60E0 # <cjk> +0x9CA9 U+60D3 # <cjk> +0x9CAA U+60B4 # <cjk> +0x9CAB U+5FF0 # <cjk> +0x9CAC U+60BD # <cjk> +0x9CAD U+60C6 # <cjk> +0x9CAE U+60B5 # <cjk> +0x9CAF U+60D8 # <cjk> +0x9CB0 U+614D # <cjk> +0x9CB1 U+6115 # <cjk> +0x9CB2 U+6106 # <cjk> +0x9CB3 U+60F6 # <cjk> +0x9CB4 U+60F7 # <cjk> +0x9CB5 U+6100 # <cjk> +0x9CB6 U+60F4 # <cjk> +0x9CB7 U+60FA # <cjk> +0x9CB8 U+6103 # <cjk> +0x9CB9 U+6121 # <cjk> +0x9CBA U+60FB # <cjk> +0x9CBB U+60F1 # <cjk> +0x9CBC U+610D # <cjk> +0x9CBD U+610E # <cjk> +0x9CBE U+6147 # <cjk> +0x9CBF U+613E # <cjk> +0x9CC0 U+6128 # <cjk> +0x9CC1 U+6127 # <cjk> +0x9CC2 U+614A # <cjk> +0x9CC3 U+613F # <cjk> +0x9CC4 U+613C # <cjk> +0x9CC5 U+612C # <cjk> +0x9CC6 U+6134 # <cjk> +0x9CC7 U+613D # <cjk> +0x9CC8 U+6142 # <cjk> +0x9CC9 U+6144 # <cjk> +0x9CCA U+6173 # <cjk> +0x9CCB U+6177 # <cjk> +0x9CCC U+6158 # <cjk> +0x9CCD U+6159 # <cjk> +0x9CCE U+615A # <cjk> +0x9CCF U+616B # <cjk> +0x9CD0 U+6174 # <cjk> +0x9CD1 U+616F # <cjk> +0x9CD2 U+6165 # <cjk> +0x9CD3 U+6171 # <cjk> +0x9CD4 U+615F # <cjk> +0x9CD5 U+615D # <cjk> +0x9CD6 U+6153 # <cjk> +0x9CD7 U+6175 # <cjk> +0x9CD8 U+6199 # <cjk> +0x9CD9 U+6196 # <cjk> +0x9CDA U+6187 # <cjk> +0x9CDB U+61AC # <cjk> +0x9CDC U+6194 # <cjk> +0x9CDD U+619A # <cjk> +0x9CDE U+618A # <cjk> +0x9CDF U+6191 # <cjk> +0x9CE0 U+61AB # <cjk> +0x9CE1 U+61AE # <cjk> +0x9CE2 U+61CC # <cjk> +0x9CE3 U+61CA # <cjk> +0x9CE4 U+61C9 # <cjk> +0x9CE5 U+61F7 # <cjk> +0x9CE6 U+61C8 # <cjk> +0x9CE7 U+61C3 # <cjk> +0x9CE8 U+61C6 # <cjk> +0x9CE9 U+61BA # <cjk> +0x9CEA U+61CB # <cjk> +0x9CEB U+7F79 # <cjk> +0x9CEC U+61CD # <cjk> +0x9CED U+61E6 # <cjk> +0x9CEE U+61E3 # <cjk> +0x9CEF U+61F6 # <cjk> +0x9CF0 U+61FA # <cjk> +0x9CF1 U+61F4 # <cjk> +0x9CF2 U+61FF # <cjk> +0x9CF3 U+61FD # <cjk> +0x9CF4 U+61FC # <cjk> +0x9CF5 U+61FE # <cjk> +0x9CF6 U+6200 # <cjk> +0x9CF7 U+6208 # <cjk> +0x9CF8 U+6209 # <cjk> +0x9CF9 U+620D # <cjk> +0x9CFA U+620C # <cjk> +0x9CFB U+6214 # <cjk> +0x9CFC U+621B # <cjk> +0x9D40 U+621E # <cjk> +0x9D41 U+6221 # <cjk> +0x9D42 U+622A # <cjk> +0x9D43 U+622E # <cjk> +0x9D44 U+6230 # <cjk> +0x9D45 U+6232 # <cjk> +0x9D46 U+6233 # <cjk> +0x9D47 U+6241 # <cjk> +0x9D48 U+624E # <cjk> +0x9D49 U+625E # <cjk> +0x9D4A U+6263 # <cjk> +0x9D4B U+625B # <cjk> +0x9D4C U+6260 # <cjk> +0x9D4D U+6268 # <cjk> +0x9D4E U+627C # <cjk> +0x9D4F U+6282 # <cjk> +0x9D50 U+6289 # <cjk> +0x9D51 U+627E # <cjk> +0x9D52 U+6292 # <cjk> +0x9D53 U+6293 # <cjk> +0x9D54 U+6296 # <cjk> +0x9D55 U+62D4 # <cjk> +0x9D56 U+6283 # <cjk> +0x9D57 U+6294 # <cjk> +0x9D58 U+62D7 # <cjk> +0x9D59 U+62D1 # <cjk> +0x9D5A U+62BB # <cjk> +0x9D5B U+62CF # <cjk> +0x9D5C U+62FF # <cjk> +0x9D5D U+62C6 # <cjk> +0x9D5E U+64D4 # <cjk> +0x9D5F U+62C8 # <cjk> +0x9D60 U+62DC # <cjk> +0x9D61 U+62CC # <cjk> +0x9D62 U+62CA # <cjk> +0x9D63 U+62C2 # <cjk> +0x9D64 U+62C7 # <cjk> +0x9D65 U+629B # <cjk> +0x9D66 U+62C9 # <cjk> +0x9D67 U+630C # <cjk> +0x9D68 U+62EE # <cjk> +0x9D69 U+62F1 # <cjk> +0x9D6A U+6327 # <cjk> +0x9D6B U+6302 # <cjk> +0x9D6C U+6308 # <cjk> +0x9D6D U+62EF # <cjk> +0x9D6E U+62F5 # <cjk> +0x9D6F U+6350 # <cjk> +0x9D70 U+633E # <cjk> +0x9D71 U+634D # <cjk> +0x9D72 U+641C # <cjk> +0x9D73 U+634F # <cjk> +0x9D74 U+6396 # <cjk> +0x9D75 U+638E # <cjk> +0x9D76 U+6380 # <cjk> +0x9D77 U+63AB # <cjk> +0x9D78 U+6376 # <cjk> +0x9D79 U+63A3 # <cjk> +0x9D7A U+638F # <cjk> +0x9D7B U+6389 # <cjk> +0x9D7C U+639F # <cjk> +0x9D7D U+63B5 # <cjk> +0x9D7E U+636B # <cjk> +0x9D80 U+6369 # <cjk> +0x9D81 U+63BE # <cjk> +0x9D82 U+63E9 # <cjk> +0x9D83 U+63C0 # <cjk> +0x9D84 U+63C6 # <cjk> +0x9D85 U+63E3 # <cjk> +0x9D86 U+63C9 # <cjk> +0x9D87 U+63D2 # <cjk> +0x9D88 U+63F6 # <cjk> +0x9D89 U+63C4 # <cjk> +0x9D8A U+6416 # <cjk> +0x9D8B U+6434 # <cjk> +0x9D8C U+6406 # <cjk> +0x9D8D U+6413 # <cjk> +0x9D8E U+6426 # <cjk> +0x9D8F U+6436 # <cjk> +0x9D90 U+651D # <cjk> +0x9D91 U+6417 # <cjk> +0x9D92 U+6428 # <cjk> +0x9D93 U+640F # <cjk> +0x9D94 U+6467 # <cjk> +0x9D95 U+646F # <cjk> +0x9D96 U+6476 # <cjk> +0x9D97 U+644E # <cjk> +0x9D98 U+652A # <cjk> +0x9D99 U+6495 # <cjk> +0x9D9A U+6493 # <cjk> +0x9D9B U+64A5 # <cjk> +0x9D9C U+64A9 # <cjk> +0x9D9D U+6488 # <cjk> +0x9D9E U+64BC # <cjk> +0x9D9F U+64DA # <cjk> +0x9DA0 U+64D2 # <cjk> +0x9DA1 U+64C5 # <cjk> +0x9DA2 U+64C7 # <cjk> +0x9DA3 U+64BB # <cjk> +0x9DA4 U+64D8 # <cjk> +0x9DA5 U+64C2 # <cjk> +0x9DA6 U+64F1 # <cjk> +0x9DA7 U+64E7 # <cjk> +0x9DA8 U+8209 # <cjk> +0x9DA9 U+64E0 # <cjk> +0x9DAA U+64E1 # <cjk> +0x9DAB U+62AC # <cjk> +0x9DAC U+64E3 # <cjk> +0x9DAD U+64EF # <cjk> +0x9DAE U+652C # <cjk> +0x9DAF U+64F6 # <cjk> +0x9DB0 U+64F4 # <cjk> +0x9DB1 U+64F2 # <cjk> +0x9DB2 U+64FA # <cjk> +0x9DB3 U+6500 # <cjk> +0x9DB4 U+64FD # <cjk> +0x9DB5 U+6518 # <cjk> +0x9DB6 U+651C # <cjk> +0x9DB7 U+6505 # <cjk> +0x9DB8 U+6524 # <cjk> +0x9DB9 U+6523 # <cjk> +0x9DBA U+652B # <cjk> +0x9DBB U+6534 # <cjk> +0x9DBC U+6535 # <cjk> +0x9DBD U+6537 # <cjk> +0x9DBE U+6536 # <cjk> +0x9DBF U+6538 # <cjk> +0x9DC0 U+754B # <cjk> +0x9DC1 U+6548 # <cjk> +0x9DC2 U+6556 # <cjk> +0x9DC3 U+6555 # <cjk> +0x9DC4 U+654D # <cjk> +0x9DC5 U+6558 # <cjk> +0x9DC6 U+655E # <cjk> +0x9DC7 U+655D # <cjk> +0x9DC8 U+6572 # <cjk> +0x9DC9 U+6578 # <cjk> +0x9DCA U+6582 # <cjk> +0x9DCB U+6583 # <cjk> +0x9DCC U+8B8A # <cjk> +0x9DCD U+659B # <cjk> +0x9DCE U+659F # <cjk> +0x9DCF U+65AB # <cjk> +0x9DD0 U+65B7 # <cjk> +0x9DD1 U+65C3 # <cjk> +0x9DD2 U+65C6 # <cjk> +0x9DD3 U+65C1 # <cjk> +0x9DD4 U+65C4 # <cjk> +0x9DD5 U+65CC # <cjk> +0x9DD6 U+65D2 # <cjk> +0x9DD7 U+65DB # <cjk> +0x9DD8 U+65D9 # <cjk> +0x9DD9 U+65E0 # <cjk> +0x9DDA U+65E1 # <cjk> +0x9DDB U+65F1 # <cjk> +0x9DDC U+6772 # <cjk> +0x9DDD U+660A # <cjk> +0x9DDE U+6603 # <cjk> +0x9DDF U+65FB # <cjk> +0x9DE0 U+6773 # <cjk> +0x9DE1 U+6635 # <cjk> +0x9DE2 U+6636 # <cjk> +0x9DE3 U+6634 # <cjk> +0x9DE4 U+661C # <cjk> +0x9DE5 U+664F # <cjk> +0x9DE6 U+6644 # <cjk> +0x9DE7 U+6649 # <cjk> +0x9DE8 U+6641 # <cjk> +0x9DE9 U+665E # <cjk> +0x9DEA U+665D # <cjk> +0x9DEB U+6664 # <cjk> +0x9DEC U+6667 # <cjk> +0x9DED U+6668 # <cjk> +0x9DEE U+665F # <cjk> +0x9DEF U+6662 # <cjk> +0x9DF0 U+6670 # <cjk> +0x9DF1 U+6683 # <cjk> +0x9DF2 U+6688 # <cjk> +0x9DF3 U+668E # <cjk> +0x9DF4 U+6689 # <cjk> +0x9DF5 U+6684 # <cjk> +0x9DF6 U+6698 # <cjk> +0x9DF7 U+669D # <cjk> +0x9DF8 U+66C1 # <cjk> +0x9DF9 U+66B9 # <cjk> +0x9DFA U+66C9 # <cjk> +0x9DFB U+66BE # <cjk> +0x9DFC U+66BC # <cjk> +0x9E40 U+66C4 # <cjk> +0x9E41 U+66B8 # <cjk> +0x9E42 U+66D6 # <cjk> +0x9E43 U+66DA # <cjk> +0x9E44 U+66E0 # <cjk> +0x9E45 U+663F # <cjk> +0x9E46 U+66E6 # <cjk> +0x9E47 U+66E9 # <cjk> +0x9E48 U+66F0 # <cjk> +0x9E49 U+66F5 # <cjk> +0x9E4A U+66F7 # <cjk> +0x9E4B U+670F # <cjk> +0x9E4C U+6716 # <cjk> +0x9E4D U+671E # <cjk> +0x9E4E U+6726 # <cjk> +0x9E4F U+6727 # <cjk> +0x9E50 U+9738 # <cjk> +0x9E51 U+672E # <cjk> +0x9E52 U+673F # <cjk> +0x9E53 U+6736 # <cjk> +0x9E54 U+6741 # <cjk> +0x9E55 U+6738 # <cjk> +0x9E56 U+6737 # <cjk> +0x9E57 U+6746 # <cjk> +0x9E58 U+675E # <cjk> +0x9E59 U+6760 # <cjk> +0x9E5A U+6759 # <cjk> +0x9E5B U+6763 # <cjk> +0x9E5C U+6764 # <cjk> +0x9E5D U+6789 # <cjk> +0x9E5E U+6770 # <cjk> +0x9E5F U+67A9 # <cjk> +0x9E60 U+677C # <cjk> +0x9E61 U+676A # <cjk> +0x9E62 U+678C # <cjk> +0x9E63 U+678B # <cjk> +0x9E64 U+67A6 # <cjk> +0x9E65 U+67A1 # <cjk> +0x9E66 U+6785 # <cjk> +0x9E67 U+67B7 # <cjk> +0x9E68 U+67EF # <cjk> +0x9E69 U+67B4 # <cjk> +0x9E6A U+67EC # <cjk> +0x9E6B U+67B3 # <cjk> +0x9E6C U+67E9 # <cjk> +0x9E6D U+67B8 # <cjk> +0x9E6E U+67E4 # <cjk> +0x9E6F U+67DE # <cjk> +0x9E70 U+67DD # <cjk> +0x9E71 U+67E2 # <cjk> +0x9E72 U+67EE # <cjk> +0x9E73 U+67B9 # <cjk> +0x9E74 U+67CE # <cjk> +0x9E75 U+67C6 # <cjk> +0x9E76 U+67E7 # <cjk> +0x9E77 U+6A9C # <cjk> +0x9E78 U+681E # <cjk> +0x9E79 U+6846 # <cjk> +0x9E7A U+6829 # <cjk> +0x9E7B U+6840 # <cjk> +0x9E7C U+684D # <cjk> +0x9E7D U+6832 # <cjk> +0x9E7E U+684E # <cjk> +0x9E80 U+68B3 # <cjk> +0x9E81 U+682B # <cjk> +0x9E82 U+6859 # <cjk> +0x9E83 U+6863 # <cjk> +0x9E84 U+6877 # <cjk> +0x9E85 U+687F # <cjk> +0x9E86 U+689F # <cjk> +0x9E87 U+688F # <cjk> +0x9E88 U+68AD # <cjk> +0x9E89 U+6894 # <cjk> +0x9E8A U+689D # <cjk> +0x9E8B U+689B # <cjk> +0x9E8C U+6883 # <cjk> +0x9E8D U+6AAE # <cjk> +0x9E8E U+68B9 # <cjk> +0x9E8F U+6874 # <cjk> +0x9E90 U+68B5 # <cjk> +0x9E91 U+68A0 # <cjk> +0x9E92 U+68BA # <cjk> +0x9E93 U+690F # <cjk> +0x9E94 U+688D # <cjk> +0x9E95 U+687E # <cjk> +0x9E96 U+6901 # <cjk> +0x9E97 U+68CA # <cjk> +0x9E98 U+6908 # <cjk> +0x9E99 U+68D8 # <cjk> +0x9E9A U+6922 # <cjk> +0x9E9B U+6926 # <cjk> +0x9E9C U+68E1 # <cjk> +0x9E9D U+690C # <cjk> +0x9E9E U+68CD # <cjk> +0x9E9F U+68D4 # <cjk> +0x9EA0 U+68E7 # <cjk> +0x9EA1 U+68D5 # <cjk> +0x9EA2 U+6936 # <cjk> +0x9EA3 U+6912 # <cjk> +0x9EA4 U+6904 # <cjk> +0x9EA5 U+68D7 # <cjk> +0x9EA6 U+68E3 # <cjk> +0x9EA7 U+6925 # <cjk> +0x9EA8 U+68F9 # <cjk> +0x9EA9 U+68E0 # <cjk> +0x9EAA U+68EF # <cjk> +0x9EAB U+6928 # <cjk> +0x9EAC U+692A # <cjk> +0x9EAD U+691A # <cjk> +0x9EAE U+6923 # <cjk> +0x9EAF U+6921 # <cjk> +0x9EB0 U+68C6 # <cjk> +0x9EB1 U+6979 # <cjk> +0x9EB2 U+6977 # <cjk> +0x9EB3 U+695C # <cjk> +0x9EB4 U+6978 # <cjk> +0x9EB5 U+696B # <cjk> +0x9EB6 U+6954 # <cjk> +0x9EB7 U+697E # <cjk> +0x9EB8 U+696E # <cjk> +0x9EB9 U+6939 # <cjk> +0x9EBA U+6974 # <cjk> +0x9EBB U+693D # <cjk> +0x9EBC U+6959 # <cjk> +0x9EBD U+6930 # <cjk> +0x9EBE U+6961 # <cjk> +0x9EBF U+695E # <cjk> +0x9EC0 U+695D # <cjk> +0x9EC1 U+6981 # <cjk> +0x9EC2 U+696A # <cjk> +0x9EC3 U+69B2 # <cjk> +0x9EC4 U+69AE # <cjk> +0x9EC5 U+69D0 # <cjk> +0x9EC6 U+69BF # <cjk> +0x9EC7 U+69C1 # <cjk> +0x9EC8 U+69D3 # <cjk> +0x9EC9 U+69BE # <cjk> +0x9ECA U+69CE # <cjk> +0x9ECB U+5BE8 # <cjk> +0x9ECC U+69CA # <cjk> +0x9ECD U+69DD # <cjk> +0x9ECE U+69BB # <cjk> +0x9ECF U+69C3 # <cjk> +0x9ED0 U+69A7 # <cjk> +0x9ED1 U+6A2E # <cjk> +0x9ED2 U+6991 # <cjk> +0x9ED3 U+69A0 # <cjk> +0x9ED4 U+699C # <cjk> +0x9ED5 U+6995 # <cjk> +0x9ED6 U+69B4 # <cjk> +0x9ED7 U+69DE # <cjk> +0x9ED8 U+69E8 # <cjk> +0x9ED9 U+6A02 # <cjk> +0x9EDA U+6A1B # <cjk> +0x9EDB U+69FF # <cjk> +0x9EDC U+6B0A # <cjk> +0x9EDD U+69F9 # <cjk> +0x9EDE U+69F2 # <cjk> +0x9EDF U+69E7 # <cjk> +0x9EE0 U+6A05 # <cjk> +0x9EE1 U+69B1 # <cjk> +0x9EE2 U+6A1E # <cjk> +0x9EE3 U+69ED # <cjk> +0x9EE4 U+6A14 # <cjk> +0x9EE5 U+69EB # <cjk> +0x9EE6 U+6A0A # <cjk> +0x9EE7 U+6A12 # <cjk> +0x9EE8 U+6AC1 # <cjk> +0x9EE9 U+6A23 # <cjk> +0x9EEA U+6A13 # <cjk> +0x9EEB U+6A44 # <cjk> +0x9EEC U+6A0C # <cjk> +0x9EED U+6A72 # <cjk> +0x9EEE U+6A36 # <cjk> +0x9EEF U+6A78 # <cjk> +0x9EF0 U+6A47 # <cjk> +0x9EF1 U+6A62 # <cjk> +0x9EF2 U+6A59 # <cjk> +0x9EF3 U+6A66 # <cjk> +0x9EF4 U+6A48 # <cjk> +0x9EF5 U+6A38 # <cjk> +0x9EF6 U+6A22 # <cjk> +0x9EF7 U+6A90 # <cjk> +0x9EF8 U+6A8D # <cjk> +0x9EF9 U+6AA0 # <cjk> +0x9EFA U+6A84 # <cjk> +0x9EFB U+6AA2 # <cjk> +0x9EFC U+6AA3 # <cjk> +0x9F40 U+6A97 # <cjk> +0x9F41 U+8617 # <cjk> +0x9F42 U+6ABB # <cjk> +0x9F43 U+6AC3 # <cjk> +0x9F44 U+6AC2 # <cjk> +0x9F45 U+6AB8 # <cjk> +0x9F46 U+6AB3 # <cjk> +0x9F47 U+6AAC # <cjk> +0x9F48 U+6ADE # <cjk> +0x9F49 U+6AD1 # <cjk> +0x9F4A U+6ADF # <cjk> +0x9F4B U+6AAA # <cjk> +0x9F4C U+6ADA # <cjk> +0x9F4D U+6AEA # <cjk> +0x9F4E U+6AFB # <cjk> +0x9F4F U+6B05 # <cjk> +0x9F50 U+8616 # <cjk> +0x9F51 U+6AFA # <cjk> +0x9F52 U+6B12 # <cjk> +0x9F53 U+6B16 # <cjk> +0x9F54 U+9B31 # <cjk> +0x9F55 U+6B1F # <cjk> +0x9F56 U+6B38 # <cjk> +0x9F57 U+6B37 # <cjk> +0x9F58 U+76DC # <cjk> +0x9F59 U+6B39 # <cjk> +0x9F5A U+98EE # <cjk> +0x9F5B U+6B47 # <cjk> +0x9F5C U+6B43 # <cjk> +0x9F5D U+6B49 # <cjk> +0x9F5E U+6B50 # <cjk> +0x9F5F U+6B59 # <cjk> +0x9F60 U+6B54 # <cjk> +0x9F61 U+6B5B # <cjk> +0x9F62 U+6B5F # <cjk> +0x9F63 U+6B61 # <cjk> +0x9F64 U+6B78 # <cjk> +0x9F65 U+6B79 # <cjk> +0x9F66 U+6B7F # <cjk> +0x9F67 U+6B80 # <cjk> +0x9F68 U+6B84 # <cjk> +0x9F69 U+6B83 # <cjk> +0x9F6A U+6B8D # <cjk> +0x9F6B U+6B98 # <cjk> +0x9F6C U+6B95 # <cjk> +0x9F6D U+6B9E # <cjk> +0x9F6E U+6BA4 # <cjk> +0x9F6F U+6BAA # <cjk> +0x9F70 U+6BAB # <cjk> +0x9F71 U+6BAF # <cjk> +0x9F72 U+6BB2 # <cjk> +0x9F73 U+6BB1 # <cjk> +0x9F74 U+6BB3 # <cjk> +0x9F75 U+6BB7 # <cjk> +0x9F76 U+6BBC # <cjk> +0x9F77 U+6BC6 # <cjk> +0x9F78 U+6BCB # <cjk> +0x9F79 U+6BD3 # <cjk> +0x9F7A U+6BDF # <cjk> +0x9F7B U+6BEC # <cjk> +0x9F7C U+6BEB # <cjk> +0x9F7D U+6BF3 # <cjk> +0x9F7E U+6BEF # <cjk> +0x9F80 U+9EBE # <cjk> +0x9F81 U+6C08 # <cjk> +0x9F82 U+6C13 # <cjk> +0x9F83 U+6C14 # <cjk> +0x9F84 U+6C1B # <cjk> +0x9F85 U+6C24 # <cjk> +0x9F86 U+6C23 # <cjk> +0x9F87 U+6C5E # <cjk> +0x9F88 U+6C55 # <cjk> +0x9F89 U+6C62 # <cjk> +0x9F8A U+6C6A # <cjk> +0x9F8B U+6C82 # <cjk> +0x9F8C U+6C8D # <cjk> +0x9F8D U+6C9A # <cjk> +0x9F8E U+6C81 # <cjk> +0x9F8F U+6C9B # <cjk> +0x9F90 U+6C7E # <cjk> +0x9F91 U+6C68 # <cjk> +0x9F92 U+6C73 # <cjk> +0x9F93 U+6C92 # <cjk> +0x9F94 U+6C90 # <cjk> +0x9F95 U+6CC4 # <cjk> +0x9F96 U+6CF1 # <cjk> +0x9F97 U+6CD3 # <cjk> +0x9F98 U+6CBD # <cjk> +0x9F99 U+6CD7 # <cjk> +0x9F9A U+6CC5 # <cjk> +0x9F9B U+6CDD # <cjk> +0x9F9C U+6CAE # <cjk> +0x9F9D U+6CB1 # <cjk> +0x9F9E U+6CBE # <cjk> +0x9F9F U+6CBA # <cjk> +0x9FA0 U+6CDB # <cjk> +0x9FA1 U+6CEF # <cjk> +0x9FA2 U+6CD9 # <cjk> +0x9FA3 U+6CEA # <cjk> +0x9FA4 U+6D1F # <cjk> +0x9FA5 U+884D # <cjk> +0x9FA6 U+6D36 # <cjk> +0x9FA7 U+6D2B # <cjk> +0x9FA8 U+6D3D # <cjk> +0x9FA9 U+6D38 # <cjk> +0x9FAA U+6D19 # <cjk> +0x9FAB U+6D35 # <cjk> +0x9FAC U+6D33 # <cjk> +0x9FAD U+6D12 # <cjk> +0x9FAE U+6D0C # <cjk> +0x9FAF U+6D63 # <cjk> +0x9FB0 U+6D93 # <cjk> +0x9FB1 U+6D64 # <cjk> +0x9FB2 U+6D5A # <cjk> +0x9FB3 U+6D79 # <cjk> +0x9FB4 U+6D59 # <cjk> +0x9FB5 U+6D8E # <cjk> +0x9FB6 U+6D95 # <cjk> +0x9FB7 U+6FE4 # <cjk> +0x9FB8 U+6D85 # <cjk> +0x9FB9 U+6DF9 # <cjk> +0x9FBA U+6E15 # <cjk> +0x9FBB U+6E0A # <cjk> +0x9FBC U+6DB5 # <cjk> +0x9FBD U+6DC7 # <cjk> +0x9FBE U+6DE6 # <cjk> +0x9FBF U+6DB8 # <cjk> +0x9FC0 U+6DC6 # <cjk> +0x9FC1 U+6DEC # <cjk> +0x9FC2 U+6DDE # <cjk> +0x9FC3 U+6DCC # <cjk> +0x9FC4 U+6DE8 # <cjk> +0x9FC5 U+6DD2 # <cjk> +0x9FC6 U+6DC5 # <cjk> +0x9FC7 U+6DFA # <cjk> +0x9FC8 U+6DD9 # <cjk> +0x9FC9 U+6DE4 # <cjk> +0x9FCA U+6DD5 # <cjk> +0x9FCB U+6DEA # <cjk> +0x9FCC U+6DEE # <cjk> +0x9FCD U+6E2D # <cjk> +0x9FCE U+6E6E # <cjk> +0x9FCF U+6E2E # <cjk> +0x9FD0 U+6E19 # <cjk> +0x9FD1 U+6E72 # <cjk> +0x9FD2 U+6E5F # <cjk> +0x9FD3 U+6E3E # <cjk> +0x9FD4 U+6E23 # <cjk> +0x9FD5 U+6E6B # <cjk> +0x9FD6 U+6E2B # <cjk> +0x9FD7 U+6E76 # <cjk> +0x9FD8 U+6E4D # <cjk> +0x9FD9 U+6E1F # <cjk> +0x9FDA U+6E43 # <cjk> +0x9FDB U+6E3A # <cjk> +0x9FDC U+6E4E # <cjk> +0x9FDD U+6E24 # <cjk> +0x9FDE U+6EFF # <cjk> +0x9FDF U+6E1D # <cjk> +0x9FE0 U+6E38 # <cjk> +0x9FE1 U+6E82 # <cjk> +0x9FE2 U+6EAA # <cjk> +0x9FE3 U+6E98 # <cjk> +0x9FE4 U+6EC9 # <cjk> +0x9FE5 U+6EB7 # <cjk> +0x9FE6 U+6ED3 # <cjk> +0x9FE7 U+6EBD # <cjk> +0x9FE8 U+6EAF # <cjk> +0x9FE9 U+6EC4 # <cjk> +0x9FEA U+6EB2 # <cjk> +0x9FEB U+6ED4 # <cjk> +0x9FEC U+6ED5 # <cjk> +0x9FED U+6E8F # <cjk> +0x9FEE U+6EA5 # <cjk> +0x9FEF U+6EC2 # <cjk> +0x9FF0 U+6E9F # <cjk> +0x9FF1 U+6F41 # <cjk> +0x9FF2 U+6F11 # <cjk> +0x9FF3 U+704C # <cjk> +0x9FF4 U+6EEC # <cjk> +0x9FF5 U+6EF8 # <cjk> +0x9FF6 U+6EFE # <cjk> +0x9FF7 U+6F3F # <cjk> +0x9FF8 U+6EF2 # <cjk> +0x9FF9 U+6F31 # <cjk> +0x9FFA U+6EEF # <cjk> +0x9FFB U+6F32 # <cjk> +0x9FFC U+6ECC # <cjk> +0xE040 U+6F3E # <cjk> +0xE041 U+6F13 # <cjk> +0xE042 U+6EF7 # <cjk> +0xE043 U+6F86 # <cjk> +0xE044 U+6F7A # <cjk> +0xE045 U+6F78 # <cjk> +0xE046 U+6F81 # <cjk> +0xE047 U+6F80 # <cjk> +0xE048 U+6F6F # <cjk> +0xE049 U+6F5B # <cjk> +0xE04A U+6FF3 # <cjk> +0xE04B U+6F6D # <cjk> +0xE04C U+6F82 # <cjk> +0xE04D U+6F7C # <cjk> +0xE04E U+6F58 # <cjk> +0xE04F U+6F8E # <cjk> +0xE050 U+6F91 # <cjk> +0xE051 U+6FC2 # <cjk> +0xE052 U+6F66 # <cjk> +0xE053 U+6FB3 # <cjk> +0xE054 U+6FA3 # <cjk> +0xE055 U+6FA1 # <cjk> +0xE056 U+6FA4 # <cjk> +0xE057 U+6FB9 # <cjk> +0xE058 U+6FC6 # <cjk> +0xE059 U+6FAA # <cjk> +0xE05A U+6FDF # <cjk> +0xE05B U+6FD5 # <cjk> +0xE05C U+6FEC # <cjk> +0xE05D U+6FD4 # <cjk> +0xE05E U+6FD8 # <cjk> +0xE05F U+6FF1 # <cjk> +0xE060 U+6FEE # <cjk> +0xE061 U+6FDB # <cjk> +0xE062 U+7009 # <cjk> +0xE063 U+700B # <cjk> +0xE064 U+6FFA # <cjk> +0xE065 U+7011 # <cjk> +0xE066 U+7001 # <cjk> +0xE067 U+700F # <cjk> +0xE068 U+6FFE # <cjk> +0xE069 U+701B # <cjk> +0xE06A U+701A # <cjk> +0xE06B U+6F74 # <cjk> +0xE06C U+701D # <cjk> +0xE06D U+7018 # <cjk> +0xE06E U+701F # <cjk> +0xE06F U+7030 # <cjk> +0xE070 U+703E # <cjk> +0xE071 U+7032 # <cjk> +0xE072 U+7051 # <cjk> +0xE073 U+7063 # <cjk> +0xE074 U+7099 # <cjk> +0xE075 U+7092 # <cjk> +0xE076 U+70AF # <cjk> +0xE077 U+70F1 # <cjk> +0xE078 U+70AC # <cjk> +0xE079 U+70B8 # <cjk> +0xE07A U+70B3 # <cjk> +0xE07B U+70AE # <cjk> +0xE07C U+70DF # <cjk> +0xE07D U+70CB # <cjk> +0xE07E U+70DD # <cjk> +0xE080 U+70D9 # <cjk> +0xE081 U+7109 # <cjk> +0xE082 U+70FD # <cjk> +0xE083 U+711C # <cjk> +0xE084 U+7119 # <cjk> +0xE085 U+7165 # <cjk> +0xE086 U+7155 # <cjk> +0xE087 U+7188 # <cjk> +0xE088 U+7166 # <cjk> +0xE089 U+7162 # <cjk> +0xE08A U+714C # <cjk> +0xE08B U+7156 # <cjk> +0xE08C U+716C # <cjk> +0xE08D U+718F # <cjk> +0xE08E U+71FB # <cjk> +0xE08F U+7184 # <cjk> +0xE090 U+7195 # <cjk> +0xE091 U+71A8 # <cjk> +0xE092 U+71AC # <cjk> +0xE093 U+71D7 # <cjk> +0xE094 U+71B9 # <cjk> +0xE095 U+71BE # <cjk> +0xE096 U+71D2 # <cjk> +0xE097 U+71C9 # <cjk> +0xE098 U+71D4 # <cjk> +0xE099 U+71CE # <cjk> +0xE09A U+71E0 # <cjk> +0xE09B U+71EC # <cjk> +0xE09C U+71E7 # <cjk> +0xE09D U+71F5 # <cjk> +0xE09E U+71FC # <cjk> +0xE09F U+71F9 # <cjk> +0xE0A0 U+71FF # <cjk> +0xE0A1 U+720D # <cjk> +0xE0A2 U+7210 # <cjk> +0xE0A3 U+721B # <cjk> +0xE0A4 U+7228 # <cjk> +0xE0A5 U+722D # <cjk> +0xE0A6 U+722C # <cjk> +0xE0A7 U+7230 # <cjk> +0xE0A8 U+7232 # <cjk> +0xE0A9 U+723B # <cjk> +0xE0AA U+723C # <cjk> +0xE0AB U+723F # <cjk> +0xE0AC U+7240 # <cjk> +0xE0AD U+7246 # <cjk> +0xE0AE U+724B # <cjk> +0xE0AF U+7258 # <cjk> +0xE0B0 U+7274 # <cjk> +0xE0B1 U+727E # <cjk> +0xE0B2 U+7282 # <cjk> +0xE0B3 U+7281 # <cjk> +0xE0B4 U+7287 # <cjk> +0xE0B5 U+7292 # <cjk> +0xE0B6 U+7296 # <cjk> +0xE0B7 U+72A2 # <cjk> +0xE0B8 U+72A7 # <cjk> +0xE0B9 U+72B9 # <cjk> +0xE0BA U+72B2 # <cjk> +0xE0BB U+72C3 # <cjk> +0xE0BC U+72C6 # <cjk> +0xE0BD U+72C4 # <cjk> +0xE0BE U+72CE # <cjk> +0xE0BF U+72D2 # <cjk> +0xE0C0 U+72E2 # <cjk> +0xE0C1 U+72E0 # <cjk> +0xE0C2 U+72E1 # <cjk> +0xE0C3 U+72F9 # <cjk> +0xE0C4 U+72F7 # <cjk> +0xE0C5 U+500F # <cjk> +0xE0C6 U+7317 # <cjk> +0xE0C7 U+730A # <cjk> +0xE0C8 U+731C # <cjk> +0xE0C9 U+7316 # <cjk> +0xE0CA U+731D # <cjk> +0xE0CB U+7334 # <cjk> +0xE0CC U+732F # <cjk> +0xE0CD U+7329 # <cjk> +0xE0CE U+7325 # <cjk> +0xE0CF U+733E # <cjk> +0xE0D0 U+734E # <cjk> +0xE0D1 U+734F # <cjk> +0xE0D2 U+9ED8 # <cjk> +0xE0D3 U+7357 # <cjk> +0xE0D4 U+736A # <cjk> +0xE0D5 U+7368 # <cjk> +0xE0D6 U+7370 # <cjk> +0xE0D7 U+7378 # <cjk> +0xE0D8 U+7375 # <cjk> +0xE0D9 U+737B # <cjk> +0xE0DA U+737A # <cjk> +0xE0DB U+73C8 # <cjk> +0xE0DC U+73B3 # <cjk> +0xE0DD U+73CE # <cjk> +0xE0DE U+73BB # <cjk> +0xE0DF U+73C0 # <cjk> +0xE0E0 U+73E5 # <cjk> +0xE0E1 U+73EE # <cjk> +0xE0E2 U+73DE # <cjk> +0xE0E3 U+74A2 # <cjk> +0xE0E4 U+7405 # <cjk> +0xE0E5 U+746F # <cjk> +0xE0E6 U+7425 # <cjk> +0xE0E7 U+73F8 # <cjk> +0xE0E8 U+7432 # <cjk> +0xE0E9 U+743A # <cjk> +0xE0EA U+7455 # <cjk> +0xE0EB U+743F # <cjk> +0xE0EC U+745F # <cjk> +0xE0ED U+7459 # <cjk> +0xE0EE U+7441 # <cjk> +0xE0EF U+745C # <cjk> +0xE0F0 U+7469 # <cjk> +0xE0F1 U+7470 # <cjk> +0xE0F2 U+7463 # <cjk> +0xE0F3 U+746A # <cjk> +0xE0F4 U+7476 # <cjk> +0xE0F5 U+747E # <cjk> +0xE0F6 U+748B # <cjk> +0xE0F7 U+749E # <cjk> +0xE0F8 U+74A7 # <cjk> +0xE0F9 U+74CA # <cjk> +0xE0FA U+74CF # <cjk> +0xE0FB U+74D4 # <cjk> +0xE0FC U+73F1 # <cjk> +0xE140 U+74E0 # <cjk> +0xE141 U+74E3 # <cjk> +0xE142 U+74E7 # <cjk> +0xE143 U+74E9 # <cjk> +0xE144 U+74EE # <cjk> +0xE145 U+74F2 # <cjk> +0xE146 U+74F0 # <cjk> +0xE147 U+74F1 # <cjk> +0xE148 U+74F8 # <cjk> +0xE149 U+74F7 # <cjk> +0xE14A U+7504 # <cjk> +0xE14B U+7503 # <cjk> +0xE14C U+7505 # <cjk> +0xE14D U+750C # <cjk> +0xE14E U+750E # <cjk> +0xE14F U+750D # <cjk> +0xE150 U+7515 # <cjk> +0xE151 U+7513 # <cjk> +0xE152 U+751E # <cjk> +0xE153 U+7526 # <cjk> +0xE154 U+752C # <cjk> +0xE155 U+753C # <cjk> +0xE156 U+7544 # <cjk> +0xE157 U+754D # <cjk> +0xE158 U+754A # <cjk> +0xE159 U+7549 # <cjk> +0xE15A U+755B # <cjk> +0xE15B U+7546 # <cjk> +0xE15C U+755A # <cjk> +0xE15D U+7569 # <cjk> +0xE15E U+7564 # <cjk> +0xE15F U+7567 # <cjk> +0xE160 U+756B # <cjk> +0xE161 U+756D # <cjk> +0xE162 U+7578 # <cjk> +0xE163 U+7576 # <cjk> +0xE164 U+7586 # <cjk> +0xE165 U+7587 # <cjk> +0xE166 U+7574 # <cjk> +0xE167 U+758A # <cjk> +0xE168 U+7589 # <cjk> +0xE169 U+7582 # <cjk> +0xE16A U+7594 # <cjk> +0xE16B U+759A # <cjk> +0xE16C U+759D # <cjk> +0xE16D U+75A5 # <cjk> +0xE16E U+75A3 # <cjk> +0xE16F U+75C2 # <cjk> +0xE170 U+75B3 # <cjk> +0xE171 U+75C3 # <cjk> +0xE172 U+75B5 # <cjk> +0xE173 U+75BD # <cjk> +0xE174 U+75B8 # <cjk> +0xE175 U+75BC # <cjk> +0xE176 U+75B1 # <cjk> +0xE177 U+75CD # <cjk> +0xE178 U+75CA # <cjk> +0xE179 U+75D2 # <cjk> +0xE17A U+75D9 # <cjk> +0xE17B U+75E3 # <cjk> +0xE17C U+75DE # <cjk> +0xE17D U+75FE # <cjk> +0xE17E U+75FF # <cjk> +0xE180 U+75FC # <cjk> +0xE181 U+7601 # <cjk> +0xE182 U+75F0 # <cjk> +0xE183 U+75FA # <cjk> +0xE184 U+75F2 # <cjk> +0xE185 U+75F3 # <cjk> +0xE186 U+760B # <cjk> +0xE187 U+760D # <cjk> +0xE188 U+7609 # <cjk> +0xE189 U+761F # <cjk> +0xE18A U+7627 # <cjk> +0xE18B U+7620 # <cjk> +0xE18C U+7621 # <cjk> +0xE18D U+7622 # <cjk> +0xE18E U+7624 # <cjk> +0xE18F U+7634 # <cjk> +0xE190 U+7630 # <cjk> +0xE191 U+763B # <cjk> +0xE192 U+7647 # <cjk> +0xE193 U+7648 # <cjk> +0xE194 U+7646 # <cjk> +0xE195 U+765C # <cjk> +0xE196 U+7658 # <cjk> +0xE197 U+7661 # <cjk> +0xE198 U+7662 # <cjk> +0xE199 U+7668 # <cjk> +0xE19A U+7669 # <cjk> +0xE19B U+766A # <cjk> +0xE19C U+7667 # <cjk> +0xE19D U+766C # <cjk> +0xE19E U+7670 # <cjk> +0xE19F U+7672 # <cjk> +0xE1A0 U+7676 # <cjk> +0xE1A1 U+7678 # <cjk> +0xE1A2 U+767C # <cjk> +0xE1A3 U+7680 # <cjk> +0xE1A4 U+7683 # <cjk> +0xE1A5 U+7688 # <cjk> +0xE1A6 U+768B # <cjk> +0xE1A7 U+768E # <cjk> +0xE1A8 U+7696 # <cjk> +0xE1A9 U+7693 # <cjk> +0xE1AA U+7699 # <cjk> +0xE1AB U+769A # <cjk> +0xE1AC U+76B0 # <cjk> +0xE1AD U+76B4 # <cjk> +0xE1AE U+76B8 # <cjk> +0xE1AF U+76B9 # <cjk> +0xE1B0 U+76BA # <cjk> +0xE1B1 U+76C2 # <cjk> +0xE1B2 U+76CD # <cjk> +0xE1B3 U+76D6 # <cjk> +0xE1B4 U+76D2 # <cjk> +0xE1B5 U+76DE # <cjk> +0xE1B6 U+76E1 # <cjk> +0xE1B7 U+76E5 # <cjk> +0xE1B8 U+76E7 # <cjk> +0xE1B9 U+76EA # <cjk> +0xE1BA U+862F # <cjk> +0xE1BB U+76FB # <cjk> +0xE1BC U+7708 # <cjk> +0xE1BD U+7707 # <cjk> +0xE1BE U+7704 # <cjk> +0xE1BF U+7729 # <cjk> +0xE1C0 U+7724 # <cjk> +0xE1C1 U+771E # <cjk> +0xE1C2 U+7725 # <cjk> +0xE1C3 U+7726 # <cjk> +0xE1C4 U+771B # <cjk> +0xE1C5 U+7737 # <cjk> +0xE1C6 U+7738 # <cjk> +0xE1C7 U+7747 # <cjk> +0xE1C8 U+775A # <cjk> +0xE1C9 U+7768 # <cjk> +0xE1CA U+776B # <cjk> +0xE1CB U+775B # <cjk> +0xE1CC U+7765 # <cjk> +0xE1CD U+777F # <cjk> +0xE1CE U+777E # <cjk> +0xE1CF U+7779 # <cjk> +0xE1D0 U+778E # <cjk> +0xE1D1 U+778B # <cjk> +0xE1D2 U+7791 # <cjk> +0xE1D3 U+77A0 # <cjk> +0xE1D4 U+779E # <cjk> +0xE1D5 U+77B0 # <cjk> +0xE1D6 U+77B6 # <cjk> +0xE1D7 U+77B9 # <cjk> +0xE1D8 U+77BF # <cjk> +0xE1D9 U+77BC # <cjk> +0xE1DA U+77BD # <cjk> +0xE1DB U+77BB # <cjk> +0xE1DC U+77C7 # <cjk> +0xE1DD U+77CD # <cjk> +0xE1DE U+77D7 # <cjk> +0xE1DF U+77DA # <cjk> +0xE1E0 U+77DC # <cjk> +0xE1E1 U+77E3 # <cjk> +0xE1E2 U+77EE # <cjk> +0xE1E3 U+77FC # <cjk> +0xE1E4 U+780C # <cjk> +0xE1E5 U+7812 # <cjk> +0xE1E6 U+7926 # <cjk> +0xE1E7 U+7820 # <cjk> +0xE1E8 U+792A # <cjk> +0xE1E9 U+7845 # <cjk> +0xE1EA U+788E # <cjk> +0xE1EB U+7874 # <cjk> +0xE1EC U+7886 # <cjk> +0xE1ED U+787C # <cjk> +0xE1EE U+789A # <cjk> +0xE1EF U+788C # <cjk> +0xE1F0 U+78A3 # <cjk> +0xE1F1 U+78B5 # <cjk> +0xE1F2 U+78AA # <cjk> +0xE1F3 U+78AF # <cjk> +0xE1F4 U+78D1 # <cjk> +0xE1F5 U+78C6 # <cjk> +0xE1F6 U+78CB # <cjk> +0xE1F7 U+78D4 # <cjk> +0xE1F8 U+78BE # <cjk> +0xE1F9 U+78BC # <cjk> +0xE1FA U+78C5 # <cjk> +0xE1FB U+78CA # <cjk> +0xE1FC U+78EC # <cjk> +0xE240 U+78E7 # <cjk> +0xE241 U+78DA # <cjk> +0xE242 U+78FD # <cjk> +0xE243 U+78F4 # <cjk> +0xE244 U+7907 # <cjk> +0xE245 U+7912 # <cjk> +0xE246 U+7911 # <cjk> +0xE247 U+7919 # <cjk> +0xE248 U+792C # <cjk> +0xE249 U+792B # <cjk> +0xE24A U+7940 # <cjk> +0xE24B U+7960 # <cjk> +0xE24C U+7957 # <cjk> +0xE24D U+795F # <cjk> +0xE24E U+795A # <cjk> +0xE24F U+7955 # <cjk> +0xE250 U+7953 # <cjk> +0xE251 U+797A # <cjk> +0xE252 U+797F # <cjk> +0xE253 U+798A # <cjk> +0xE254 U+799D # <cjk> +0xE255 U+79A7 # <cjk> +0xE256 U+9F4B # <cjk> +0xE257 U+79AA # <cjk> +0xE258 U+79AE # <cjk> +0xE259 U+79B3 # <cjk> +0xE25A U+79B9 # <cjk> +0xE25B U+79BA # <cjk> +0xE25C U+79C9 # <cjk> +0xE25D U+79D5 # <cjk> +0xE25E U+79E7 # <cjk> +0xE25F U+79EC # <cjk> +0xE260 U+79E1 # <cjk> +0xE261 U+79E3 # <cjk> +0xE262 U+7A08 # <cjk> +0xE263 U+7A0D # <cjk> +0xE264 U+7A18 # <cjk> +0xE265 U+7A19 # <cjk> +0xE266 U+7A20 # <cjk> +0xE267 U+7A1F # <cjk> +0xE268 U+7980 # <cjk> +0xE269 U+7A31 # <cjk> +0xE26A U+7A3B # <cjk> +0xE26B U+7A3E # <cjk> +0xE26C U+7A37 # <cjk> +0xE26D U+7A43 # <cjk> +0xE26E U+7A57 # <cjk> +0xE26F U+7A49 # <cjk> +0xE270 U+7A61 # <cjk> +0xE271 U+7A62 # <cjk> +0xE272 U+7A69 # <cjk> +0xE273 U+9F9D # <cjk> +0xE274 U+7A70 # <cjk> +0xE275 U+7A79 # <cjk> +0xE276 U+7A7D # <cjk> +0xE277 U+7A88 # <cjk> +0xE278 U+7A97 # <cjk> +0xE279 U+7A95 # <cjk> +0xE27A U+7A98 # <cjk> +0xE27B U+7A96 # <cjk> +0xE27C U+7AA9 # <cjk> +0xE27D U+7AC8 # <cjk> +0xE27E U+7AB0 # <cjk> +0xE280 U+7AB6 # <cjk> +0xE281 U+7AC5 # <cjk> +0xE282 U+7AC4 # <cjk> +0xE283 U+7ABF # <cjk> +0xE284 U+9083 # <cjk> +0xE285 U+7AC7 # <cjk> +0xE286 U+7ACA # <cjk> +0xE287 U+7ACD # <cjk> +0xE288 U+7ACF # <cjk> +0xE289 U+7AD5 # <cjk> +0xE28A U+7AD3 # <cjk> +0xE28B U+7AD9 # <cjk> +0xE28C U+7ADA # <cjk> +0xE28D U+7ADD # <cjk> +0xE28E U+7AE1 # <cjk> +0xE28F U+7AE2 # <cjk> +0xE290 U+7AE6 # <cjk> +0xE291 U+7AED # <cjk> +0xE292 U+7AF0 # <cjk> +0xE293 U+7B02 # <cjk> +0xE294 U+7B0F # <cjk> +0xE295 U+7B0A # <cjk> +0xE296 U+7B06 # <cjk> +0xE297 U+7B33 # <cjk> +0xE298 U+7B18 # <cjk> +0xE299 U+7B19 # <cjk> +0xE29A U+7B1E # <cjk> +0xE29B U+7B35 # <cjk> +0xE29C U+7B28 # <cjk> +0xE29D U+7B36 # <cjk> +0xE29E U+7B50 # <cjk> +0xE29F U+7B7A # <cjk> +0xE2A0 U+7B04 # <cjk> +0xE2A1 U+7B4D # <cjk> +0xE2A2 U+7B0B # <cjk> +0xE2A3 U+7B4C # <cjk> +0xE2A4 U+7B45 # <cjk> +0xE2A5 U+7B75 # <cjk> +0xE2A6 U+7B65 # <cjk> +0xE2A7 U+7B74 # <cjk> +0xE2A8 U+7B67 # <cjk> +0xE2A9 U+7B70 # <cjk> +0xE2AA U+7B71 # <cjk> +0xE2AB U+7B6C # <cjk> +0xE2AC U+7B6E # <cjk> +0xE2AD U+7B9D # <cjk> +0xE2AE U+7B98 # <cjk> +0xE2AF U+7B9F # <cjk> +0xE2B0 U+7B8D # <cjk> +0xE2B1 U+7B9C # <cjk> +0xE2B2 U+7B9A # <cjk> +0xE2B3 U+7B8B # <cjk> +0xE2B4 U+7B92 # <cjk> +0xE2B5 U+7B8F # <cjk> +0xE2B6 U+7B5D # <cjk> +0xE2B7 U+7B99 # <cjk> +0xE2B8 U+7BCB # <cjk> +0xE2B9 U+7BC1 # <cjk> +0xE2BA U+7BCC # <cjk> +0xE2BB U+7BCF # <cjk> +0xE2BC U+7BB4 # <cjk> +0xE2BD U+7BC6 # <cjk> +0xE2BE U+7BDD # <cjk> +0xE2BF U+7BE9 # <cjk> +0xE2C0 U+7C11 # <cjk> +0xE2C1 U+7C14 # <cjk> +0xE2C2 U+7BE6 # <cjk> +0xE2C3 U+7BE5 # <cjk> +0xE2C4 U+7C60 # <cjk> +0xE2C5 U+7C00 # <cjk> +0xE2C6 U+7C07 # <cjk> +0xE2C7 U+7C13 # <cjk> +0xE2C8 U+7BF3 # <cjk> +0xE2C9 U+7BF7 # <cjk> +0xE2CA U+7C17 # <cjk> +0xE2CB U+7C0D # <cjk> +0xE2CC U+7BF6 # <cjk> +0xE2CD U+7C23 # <cjk> +0xE2CE U+7C27 # <cjk> +0xE2CF U+7C2A # <cjk> +0xE2D0 U+7C1F # <cjk> +0xE2D1 U+7C37 # <cjk> +0xE2D2 U+7C2B # <cjk> +0xE2D3 U+7C3D # <cjk> +0xE2D4 U+7C4C # <cjk> +0xE2D5 U+7C43 # <cjk> +0xE2D6 U+7C54 # <cjk> +0xE2D7 U+7C4F # <cjk> +0xE2D8 U+7C40 # <cjk> +0xE2D9 U+7C50 # <cjk> +0xE2DA U+7C58 # <cjk> +0xE2DB U+7C5F # <cjk> +0xE2DC U+7C64 # <cjk> +0xE2DD U+7C56 # <cjk> +0xE2DE U+7C65 # <cjk> +0xE2DF U+7C6C # <cjk> +0xE2E0 U+7C75 # <cjk> +0xE2E1 U+7C83 # <cjk> +0xE2E2 U+7C90 # <cjk> +0xE2E3 U+7CA4 # <cjk> +0xE2E4 U+7CAD # <cjk> +0xE2E5 U+7CA2 # <cjk> +0xE2E6 U+7CAB # <cjk> +0xE2E7 U+7CA1 # <cjk> +0xE2E8 U+7CA8 # <cjk> +0xE2E9 U+7CB3 # <cjk> +0xE2EA U+7CB2 # <cjk> +0xE2EB U+7CB1 # <cjk> +0xE2EC U+7CAE # <cjk> +0xE2ED U+7CB9 # <cjk> +0xE2EE U+7CBD # <cjk> +0xE2EF U+7CC0 # <cjk> +0xE2F0 U+7CC5 # <cjk> +0xE2F1 U+7CC2 # <cjk> +0xE2F2 U+7CD8 # <cjk> +0xE2F3 U+7CD2 # <cjk> +0xE2F4 U+7CDC # <cjk> +0xE2F5 U+7CE2 # <cjk> +0xE2F6 U+9B3B # <cjk> +0xE2F7 U+7CEF # <cjk> +0xE2F8 U+7CF2 # <cjk> +0xE2F9 U+7CF4 # <cjk> +0xE2FA U+7CF6 # <cjk> +0xE2FB U+7CFA # <cjk> +0xE2FC U+7D06 # <cjk> +0xE340 U+7D02 # <cjk> +0xE341 U+7D1C # <cjk> +0xE342 U+7D15 # <cjk> +0xE343 U+7D0A # <cjk> +0xE344 U+7D45 # <cjk> +0xE345 U+7D4B # <cjk> +0xE346 U+7D2E # <cjk> +0xE347 U+7D32 # <cjk> +0xE348 U+7D3F # <cjk> +0xE349 U+7D35 # <cjk> +0xE34A U+7D46 # <cjk> +0xE34B U+7D73 # <cjk> +0xE34C U+7D56 # <cjk> +0xE34D U+7D4E # <cjk> +0xE34E U+7D72 # <cjk> +0xE34F U+7D68 # <cjk> +0xE350 U+7D6E # <cjk> +0xE351 U+7D4F # <cjk> +0xE352 U+7D63 # <cjk> +0xE353 U+7D93 # <cjk> +0xE354 U+7D89 # <cjk> +0xE355 U+7D5B # <cjk> +0xE356 U+7D8F # <cjk> +0xE357 U+7D7D # <cjk> +0xE358 U+7D9B # <cjk> +0xE359 U+7DBA # <cjk> +0xE35A U+7DAE # <cjk> +0xE35B U+7DA3 # <cjk> +0xE35C U+7DB5 # <cjk> +0xE35D U+7DC7 # <cjk> +0xE35E U+7DBD # <cjk> +0xE35F U+7DAB # <cjk> +0xE360 U+7E3D # <cjk> +0xE361 U+7DA2 # <cjk> +0xE362 U+7DAF # <cjk> +0xE363 U+7DDC # <cjk> +0xE364 U+7DB8 # <cjk> +0xE365 U+7D9F # <cjk> +0xE366 U+7DB0 # <cjk> +0xE367 U+7DD8 # <cjk> +0xE368 U+7DDD # <cjk> +0xE369 U+7DE4 # <cjk> +0xE36A U+7DDE # <cjk> +0xE36B U+7DFB # <cjk> +0xE36C U+7DF2 # <cjk> +0xE36D U+7DE1 # <cjk> +0xE36E U+7E05 # <cjk> +0xE36F U+7E0A # <cjk> +0xE370 U+7E23 # <cjk> +0xE371 U+7E21 # <cjk> +0xE372 U+7E12 # <cjk> +0xE373 U+7E31 # <cjk> +0xE374 U+7E1F # <cjk> +0xE375 U+7E09 # <cjk> +0xE376 U+7E0B # <cjk> +0xE377 U+7E22 # <cjk> +0xE378 U+7E46 # <cjk> +0xE379 U+7E66 # <cjk> +0xE37A U+7E3B # <cjk> +0xE37B U+7E35 # <cjk> +0xE37C U+7E39 # <cjk> +0xE37D U+7E43 # <cjk> +0xE37E U+7E37 # <cjk> +0xE380 U+7E32 # <cjk> +0xE381 U+7E3A # <cjk> +0xE382 U+7E67 # <cjk> +0xE383 U+7E5D # <cjk> +0xE384 U+7E56 # <cjk> +0xE385 U+7E5E # <cjk> +0xE386 U+7E59 # <cjk> +0xE387 U+7E5A # <cjk> +0xE388 U+7E79 # <cjk> +0xE389 U+7E6A # <cjk> +0xE38A U+7E69 # <cjk> +0xE38B U+7E7C # <cjk> +0xE38C U+7E7B # <cjk> +0xE38D U+7E83 # <cjk> +0xE38E U+7DD5 # <cjk> +0xE38F U+7E7D # <cjk> +0xE390 U+8FAE # <cjk> +0xE391 U+7E7F # <cjk> +0xE392 U+7E88 # <cjk> +0xE393 U+7E89 # <cjk> +0xE394 U+7E8C # <cjk> +0xE395 U+7E92 # <cjk> +0xE396 U+7E90 # <cjk> +0xE397 U+7E93 # <cjk> +0xE398 U+7E94 # <cjk> +0xE399 U+7E96 # <cjk> +0xE39A U+7E8E # <cjk> +0xE39B U+7E9B # <cjk> +0xE39C U+7E9C # <cjk> +0xE39D U+7F38 # <cjk> +0xE39E U+7F3A # <cjk> +0xE39F U+7F45 # <cjk> +0xE3A0 U+7F4C # <cjk> +0xE3A1 U+7F4D # <cjk> +0xE3A2 U+7F4E # <cjk> +0xE3A3 U+7F50 # <cjk> +0xE3A4 U+7F51 # <cjk> +0xE3A5 U+7F55 # <cjk> +0xE3A6 U+7F54 # <cjk> +0xE3A7 U+7F58 # <cjk> +0xE3A8 U+7F5F # <cjk> +0xE3A9 U+7F60 # <cjk> +0xE3AA U+7F68 # <cjk> +0xE3AB U+7F69 # <cjk> +0xE3AC U+7F67 # <cjk> +0xE3AD U+7F78 # <cjk> +0xE3AE U+7F82 # <cjk> +0xE3AF U+7F86 # <cjk> +0xE3B0 U+7F83 # <cjk> +0xE3B1 U+7F88 # <cjk> +0xE3B2 U+7F87 # <cjk> +0xE3B3 U+7F8C # <cjk> +0xE3B4 U+7F94 # <cjk> +0xE3B5 U+7F9E # <cjk> +0xE3B6 U+7F9D # <cjk> +0xE3B7 U+7F9A # <cjk> +0xE3B8 U+7FA3 # <cjk> +0xE3B9 U+7FAF # <cjk> +0xE3BA U+7FB2 # <cjk> +0xE3BB U+7FB9 # <cjk> +0xE3BC U+7FAE # <cjk> +0xE3BD U+7FB6 # <cjk> +0xE3BE U+7FB8 # <cjk> +0xE3BF U+8B71 # <cjk> +0xE3C0 U+7FC5 # <cjk> +0xE3C1 U+7FC6 # <cjk> +0xE3C2 U+7FCA # <cjk> +0xE3C3 U+7FD5 # <cjk> +0xE3C4 U+7FD4 # <cjk> +0xE3C5 U+7FE1 # <cjk> +0xE3C6 U+7FE6 # <cjk> +0xE3C7 U+7FE9 # <cjk> +0xE3C8 U+7FF3 # <cjk> +0xE3C9 U+7FF9 # <cjk> +0xE3CA U+98DC # <cjk> +0xE3CB U+8006 # <cjk> +0xE3CC U+8004 # <cjk> +0xE3CD U+800B # <cjk> +0xE3CE U+8012 # <cjk> +0xE3CF U+8018 # <cjk> +0xE3D0 U+8019 # <cjk> +0xE3D1 U+801C # <cjk> +0xE3D2 U+8021 # <cjk> +0xE3D3 U+8028 # <cjk> +0xE3D4 U+803F # <cjk> +0xE3D5 U+803B # <cjk> +0xE3D6 U+804A # <cjk> +0xE3D7 U+8046 # <cjk> +0xE3D8 U+8052 # <cjk> +0xE3D9 U+8058 # <cjk> +0xE3DA U+805A # <cjk> +0xE3DB U+805F # <cjk> +0xE3DC U+8062 # <cjk> +0xE3DD U+8068 # <cjk> +0xE3DE U+8073 # <cjk> +0xE3DF U+8072 # <cjk> +0xE3E0 U+8070 # <cjk> +0xE3E1 U+8076 # <cjk> +0xE3E2 U+8079 # <cjk> +0xE3E3 U+807D # <cjk> +0xE3E4 U+807F # <cjk> +0xE3E5 U+8084 # <cjk> +0xE3E6 U+8086 # <cjk> +0xE3E7 U+8085 # <cjk> +0xE3E8 U+809B # <cjk> +0xE3E9 U+8093 # <cjk> +0xE3EA U+809A # <cjk> +0xE3EB U+80AD # <cjk> +0xE3EC U+5190 # <cjk> +0xE3ED U+80AC # <cjk> +0xE3EE U+80DB # <cjk> +0xE3EF U+80E5 # <cjk> +0xE3F0 U+80D9 # <cjk> +0xE3F1 U+80DD # <cjk> +0xE3F2 U+80C4 # <cjk> +0xE3F3 U+80DA # <cjk> +0xE3F4 U+80D6 # <cjk> +0xE3F5 U+8109 # <cjk> +0xE3F6 U+80EF # <cjk> +0xE3F7 U+80F1 # <cjk> +0xE3F8 U+811B # <cjk> +0xE3F9 U+8129 # <cjk> +0xE3FA U+8123 # <cjk> +0xE3FB U+812F # <cjk> +0xE3FC U+814B # <cjk> +0xE440 U+968B # <cjk> +0xE441 U+8146 # <cjk> +0xE442 U+813E # <cjk> +0xE443 U+8153 # <cjk> +0xE444 U+8151 # <cjk> +0xE445 U+80FC # <cjk> +0xE446 U+8171 # <cjk> +0xE447 U+816E # <cjk> +0xE448 U+8165 # <cjk> +0xE449 U+8166 # <cjk> +0xE44A U+8174 # <cjk> +0xE44B U+8183 # <cjk> +0xE44C U+8188 # <cjk> +0xE44D U+818A # <cjk> +0xE44E U+8180 # <cjk> +0xE44F U+8182 # <cjk> +0xE450 U+81A0 # <cjk> +0xE451 U+8195 # <cjk> +0xE452 U+81A4 # <cjk> +0xE453 U+81A3 # <cjk> +0xE454 U+815F # <cjk> +0xE455 U+8193 # <cjk> +0xE456 U+81A9 # <cjk> +0xE457 U+81B0 # <cjk> +0xE458 U+81B5 # <cjk> +0xE459 U+81BE # <cjk> +0xE45A U+81B8 # <cjk> +0xE45B U+81BD # <cjk> +0xE45C U+81C0 # <cjk> +0xE45D U+81C2 # <cjk> +0xE45E U+81BA # <cjk> +0xE45F U+81C9 # <cjk> +0xE460 U+81CD # <cjk> +0xE461 U+81D1 # <cjk> +0xE462 U+81D9 # <cjk> +0xE463 U+81D8 # <cjk> +0xE464 U+81C8 # <cjk> +0xE465 U+81DA # <cjk> +0xE466 U+81DF # <cjk> +0xE467 U+81E0 # <cjk> +0xE468 U+81E7 # <cjk> +0xE469 U+81FA # <cjk> +0xE46A U+81FB # <cjk> +0xE46B U+81FE # <cjk> +0xE46C U+8201 # <cjk> +0xE46D U+8202 # <cjk> +0xE46E U+8205 # <cjk> +0xE46F U+8207 # <cjk> +0xE470 U+820A # <cjk> +0xE471 U+820D # <cjk> +0xE472 U+8210 # <cjk> +0xE473 U+8216 # <cjk> +0xE474 U+8229 # <cjk> +0xE475 U+822B # <cjk> +0xE476 U+8238 # <cjk> +0xE477 U+8233 # <cjk> +0xE478 U+8240 # <cjk> +0xE479 U+8259 # <cjk> +0xE47A U+8258 # <cjk> +0xE47B U+825D # <cjk> +0xE47C U+825A # <cjk> +0xE47D U+825F # <cjk> +0xE47E U+8264 # <cjk> +0xE480 U+8262 # <cjk> +0xE481 U+8268 # <cjk> +0xE482 U+826A # <cjk> +0xE483 U+826B # <cjk> +0xE484 U+822E # <cjk> +0xE485 U+8271 # <cjk> +0xE486 U+8277 # <cjk> +0xE487 U+8278 # <cjk> +0xE488 U+827E # <cjk> +0xE489 U+828D # <cjk> +0xE48A U+8292 # <cjk> +0xE48B U+82AB # <cjk> +0xE48C U+829F # <cjk> +0xE48D U+82BB # <cjk> +0xE48E U+82AC # <cjk> +0xE48F U+82E1 # <cjk> +0xE490 U+82E3 # <cjk> +0xE491 U+82DF # <cjk> +0xE492 U+82D2 # <cjk> +0xE493 U+82F4 # <cjk> +0xE494 U+82F3 # <cjk> +0xE495 U+82FA # <cjk> +0xE496 U+8393 # <cjk> +0xE497 U+8303 # <cjk> +0xE498 U+82FB # <cjk> +0xE499 U+82F9 # <cjk> +0xE49A U+82DE # <cjk> +0xE49B U+8306 # <cjk> +0xE49C U+82DC # <cjk> +0xE49D U+8309 # <cjk> +0xE49E U+82D9 # <cjk> +0xE49F U+8335 # <cjk> +0xE4A0 U+8334 # <cjk> +0xE4A1 U+8316 # <cjk> +0xE4A2 U+8332 # <cjk> +0xE4A3 U+8331 # <cjk> +0xE4A4 U+8340 # <cjk> +0xE4A5 U+8339 # <cjk> +0xE4A6 U+8350 # <cjk> +0xE4A7 U+8345 # <cjk> +0xE4A8 U+832F # <cjk> +0xE4A9 U+832B # <cjk> +0xE4AA U+8317 # <cjk> +0xE4AB U+8318 # <cjk> +0xE4AC U+8385 # <cjk> +0xE4AD U+839A # <cjk> +0xE4AE U+83AA # <cjk> +0xE4AF U+839F # <cjk> +0xE4B0 U+83A2 # <cjk> +0xE4B1 U+8396 # <cjk> +0xE4B2 U+8323 # <cjk> +0xE4B3 U+838E # <cjk> +0xE4B4 U+8387 # <cjk> +0xE4B5 U+838A # <cjk> +0xE4B6 U+837C # <cjk> +0xE4B7 U+83B5 # <cjk> +0xE4B8 U+8373 # <cjk> +0xE4B9 U+8375 # <cjk> +0xE4BA U+83A0 # <cjk> +0xE4BB U+8389 # <cjk> +0xE4BC U+83A8 # <cjk> +0xE4BD U+83F4 # <cjk> +0xE4BE U+8413 # <cjk> +0xE4BF U+83EB # <cjk> +0xE4C0 U+83CE # <cjk> +0xE4C1 U+83FD # <cjk> +0xE4C2 U+8403 # <cjk> +0xE4C3 U+83D8 # <cjk> +0xE4C4 U+840B # <cjk> +0xE4C5 U+83C1 # <cjk> +0xE4C6 U+83F7 # <cjk> +0xE4C7 U+8407 # <cjk> +0xE4C8 U+83E0 # <cjk> +0xE4C9 U+83F2 # <cjk> +0xE4CA U+840D # <cjk> +0xE4CB U+8422 # <cjk> +0xE4CC U+8420 # <cjk> +0xE4CD U+83BD # <cjk> +0xE4CE U+8438 # <cjk> +0xE4CF U+8506 # <cjk> +0xE4D0 U+83FB # <cjk> +0xE4D1 U+846D # <cjk> +0xE4D2 U+842A # <cjk> +0xE4D3 U+843C # <cjk> +0xE4D4 U+855A # <cjk> +0xE4D5 U+8484 # <cjk> +0xE4D6 U+8477 # <cjk> +0xE4D7 U+846B # <cjk> +0xE4D8 U+84AD # <cjk> +0xE4D9 U+846E # <cjk> +0xE4DA U+8482 # <cjk> +0xE4DB U+8469 # <cjk> +0xE4DC U+8446 # <cjk> +0xE4DD U+842C # <cjk> +0xE4DE U+846F # <cjk> +0xE4DF U+8479 # <cjk> +0xE4E0 U+8435 # <cjk> +0xE4E1 U+84CA # <cjk> +0xE4E2 U+8462 # <cjk> +0xE4E3 U+84B9 # <cjk> +0xE4E4 U+84BF # <cjk> +0xE4E5 U+849F # <cjk> +0xE4E6 U+84D9 # <cjk> +0xE4E7 U+84CD # <cjk> +0xE4E8 U+84BB # <cjk> +0xE4E9 U+84DA # <cjk> +0xE4EA U+84D0 # <cjk> +0xE4EB U+84C1 # <cjk> +0xE4EC U+84C6 # <cjk> +0xE4ED U+84D6 # <cjk> +0xE4EE U+84A1 # <cjk> +0xE4EF U+8521 # <cjk> +0xE4F0 U+84FF # <cjk> +0xE4F1 U+84F4 # <cjk> +0xE4F2 U+8517 # <cjk> +0xE4F3 U+8518 # <cjk> +0xE4F4 U+852C # <cjk> +0xE4F5 U+851F # <cjk> +0xE4F6 U+8515 # <cjk> +0xE4F7 U+8514 # <cjk> +0xE4F8 U+84FC # <cjk> +0xE4F9 U+8540 # <cjk> +0xE4FA U+8563 # <cjk> +0xE4FB U+8558 # <cjk> +0xE4FC U+8548 # <cjk> +0xE540 U+8541 # <cjk> +0xE541 U+8602 # <cjk> +0xE542 U+854B # <cjk> +0xE543 U+8555 # <cjk> +0xE544 U+8580 # <cjk> +0xE545 U+85A4 # <cjk> +0xE546 U+8588 # <cjk> +0xE547 U+8591 # <cjk> +0xE548 U+858A # <cjk> +0xE549 U+85A8 # <cjk> +0xE54A U+856D # <cjk> +0xE54B U+8594 # <cjk> +0xE54C U+859B # <cjk> +0xE54D U+85EA # <cjk> +0xE54E U+8587 # <cjk> +0xE54F U+859C # <cjk> +0xE550 U+8577 # <cjk> +0xE551 U+857E # <cjk> +0xE552 U+8590 # <cjk> +0xE553 U+85C9 # <cjk> +0xE554 U+85BA # <cjk> +0xE555 U+85CF # <cjk> +0xE556 U+85B9 # <cjk> +0xE557 U+85D0 # <cjk> +0xE558 U+85D5 # <cjk> +0xE559 U+85DD # <cjk> +0xE55A U+85E5 # <cjk> +0xE55B U+85DC # <cjk> +0xE55C U+85F9 # <cjk> +0xE55D U+860A # <cjk> +0xE55E U+8613 # <cjk> +0xE55F U+860B # <cjk> +0xE560 U+85FE # <cjk> +0xE561 U+85FA # <cjk> +0xE562 U+8606 # <cjk> +0xE563 U+8622 # <cjk> +0xE564 U+861A # <cjk> +0xE565 U+8630 # <cjk> +0xE566 U+863F # <cjk> +0xE567 U+864D # <cjk> +0xE568 U+4E55 # <cjk> +0xE569 U+8654 # <cjk> +0xE56A U+865F # <cjk> +0xE56B U+8667 # <cjk> +0xE56C U+8671 # <cjk> +0xE56D U+8693 # <cjk> +0xE56E U+86A3 # <cjk> +0xE56F U+86A9 # <cjk> +0xE570 U+86AA # <cjk> +0xE571 U+868B # <cjk> +0xE572 U+868C # <cjk> +0xE573 U+86B6 # <cjk> +0xE574 U+86AF # <cjk> +0xE575 U+86C4 # <cjk> +0xE576 U+86C6 # <cjk> +0xE577 U+86B0 # <cjk> +0xE578 U+86C9 # <cjk> +0xE579 U+8823 # <cjk> +0xE57A U+86AB # <cjk> +0xE57B U+86D4 # <cjk> +0xE57C U+86DE # <cjk> +0xE57D U+86E9 # <cjk> +0xE57E U+86EC # <cjk> +0xE580 U+86DF # <cjk> +0xE581 U+86DB # <cjk> +0xE582 U+86EF # <cjk> +0xE583 U+8712 # <cjk> +0xE584 U+8706 # <cjk> +0xE585 U+8708 # <cjk> +0xE586 U+8700 # <cjk> +0xE587 U+8703 # <cjk> +0xE588 U+86FB # <cjk> +0xE589 U+8711 # <cjk> +0xE58A U+8709 # <cjk> +0xE58B U+870D # <cjk> +0xE58C U+86F9 # <cjk> +0xE58D U+870A # <cjk> +0xE58E U+8734 # <cjk> +0xE58F U+873F # <cjk> +0xE590 U+8737 # <cjk> +0xE591 U+873B # <cjk> +0xE592 U+8725 # <cjk> +0xE593 U+8729 # <cjk> +0xE594 U+871A # <cjk> +0xE595 U+8760 # <cjk> +0xE596 U+875F # <cjk> +0xE597 U+8778 # <cjk> +0xE598 U+874C # <cjk> +0xE599 U+874E # <cjk> +0xE59A U+8774 # <cjk> +0xE59B U+8757 # <cjk> +0xE59C U+8768 # <cjk> +0xE59D U+876E # <cjk> +0xE59E U+8759 # <cjk> +0xE59F U+8753 # <cjk> +0xE5A0 U+8763 # <cjk> +0xE5A1 U+876A # <cjk> +0xE5A2 U+8805 # <cjk> +0xE5A3 U+87A2 # <cjk> +0xE5A4 U+879F # <cjk> +0xE5A5 U+8782 # <cjk> +0xE5A6 U+87AF # <cjk> +0xE5A7 U+87CB # <cjk> +0xE5A8 U+87BD # <cjk> +0xE5A9 U+87C0 # <cjk> +0xE5AA U+87D0 # <cjk> +0xE5AB U+96D6 # <cjk> +0xE5AC U+87AB # <cjk> +0xE5AD U+87C4 # <cjk> +0xE5AE U+87B3 # <cjk> +0xE5AF U+87C7 # <cjk> +0xE5B0 U+87C6 # <cjk> +0xE5B1 U+87BB # <cjk> +0xE5B2 U+87EF # <cjk> +0xE5B3 U+87F2 # <cjk> +0xE5B4 U+87E0 # <cjk> +0xE5B5 U+880F # <cjk> +0xE5B6 U+880D # <cjk> +0xE5B7 U+87FE # <cjk> +0xE5B8 U+87F6 # <cjk> +0xE5B9 U+87F7 # <cjk> +0xE5BA U+880E # <cjk> +0xE5BB U+87D2 # <cjk> +0xE5BC U+8811 # <cjk> +0xE5BD U+8816 # <cjk> +0xE5BE U+8815 # <cjk> +0xE5BF U+8822 # <cjk> +0xE5C0 U+8821 # <cjk> +0xE5C1 U+8831 # <cjk> +0xE5C2 U+8836 # <cjk> +0xE5C3 U+8839 # <cjk> +0xE5C4 U+8827 # <cjk> +0xE5C5 U+883B # <cjk> +0xE5C6 U+8844 # <cjk> +0xE5C7 U+8842 # <cjk> +0xE5C8 U+8852 # <cjk> +0xE5C9 U+8859 # <cjk> +0xE5CA U+885E # <cjk> +0xE5CB U+8862 # <cjk> +0xE5CC U+886B # <cjk> +0xE5CD U+8881 # <cjk> +0xE5CE U+887E # <cjk> +0xE5CF U+889E # <cjk> +0xE5D0 U+8875 # <cjk> +0xE5D1 U+887D # <cjk> +0xE5D2 U+88B5 # <cjk> +0xE5D3 U+8872 # <cjk> +0xE5D4 U+8882 # <cjk> +0xE5D5 U+8897 # <cjk> +0xE5D6 U+8892 # <cjk> +0xE5D7 U+88AE # <cjk> +0xE5D8 U+8899 # <cjk> +0xE5D9 U+88A2 # <cjk> +0xE5DA U+888D # <cjk> +0xE5DB U+88A4 # <cjk> +0xE5DC U+88B0 # <cjk> +0xE5DD U+88BF # <cjk> +0xE5DE U+88B1 # <cjk> +0xE5DF U+88C3 # <cjk> +0xE5E0 U+88C4 # <cjk> +0xE5E1 U+88D4 # <cjk> +0xE5E2 U+88D8 # <cjk> +0xE5E3 U+88D9 # <cjk> +0xE5E4 U+88DD # <cjk> +0xE5E5 U+88F9 # <cjk> +0xE5E6 U+8902 # <cjk> +0xE5E7 U+88FC # <cjk> +0xE5E8 U+88F4 # <cjk> +0xE5E9 U+88E8 # <cjk> +0xE5EA U+88F2 # <cjk> +0xE5EB U+8904 # <cjk> +0xE5EC U+890C # <cjk> +0xE5ED U+890A # <cjk> +0xE5EE U+8913 # <cjk> +0xE5EF U+8943 # <cjk> +0xE5F0 U+891E # <cjk> +0xE5F1 U+8925 # <cjk> +0xE5F2 U+892A # <cjk> +0xE5F3 U+892B # <cjk> +0xE5F4 U+8941 # <cjk> +0xE5F5 U+8944 # <cjk> +0xE5F6 U+893B # <cjk> +0xE5F7 U+8936 # <cjk> +0xE5F8 U+8938 # <cjk> +0xE5F9 U+894C # <cjk> +0xE5FA U+891D # <cjk> +0xE5FB U+8960 # <cjk> +0xE5FC U+895E # <cjk> +0xE640 U+8966 # <cjk> +0xE641 U+8964 # <cjk> +0xE642 U+896D # <cjk> +0xE643 U+896A # <cjk> +0xE644 U+896F # <cjk> +0xE645 U+8974 # <cjk> +0xE646 U+8977 # <cjk> +0xE647 U+897E # <cjk> +0xE648 U+8983 # <cjk> +0xE649 U+8988 # <cjk> +0xE64A U+898A # <cjk> +0xE64B U+8993 # <cjk> +0xE64C U+8998 # <cjk> +0xE64D U+89A1 # <cjk> +0xE64E U+89A9 # <cjk> +0xE64F U+89A6 # <cjk> +0xE650 U+89AC # <cjk> +0xE651 U+89AF # <cjk> +0xE652 U+89B2 # <cjk> +0xE653 U+89BA # <cjk> +0xE654 U+89BD # <cjk> +0xE655 U+89BF # <cjk> +0xE656 U+89C0 # <cjk> +0xE657 U+89DA # <cjk> +0xE658 U+89DC # <cjk> +0xE659 U+89DD # <cjk> +0xE65A U+89E7 # <cjk> +0xE65B U+89F4 # <cjk> +0xE65C U+89F8 # <cjk> +0xE65D U+8A03 # <cjk> +0xE65E U+8A16 # <cjk> +0xE65F U+8A10 # <cjk> +0xE660 U+8A0C # <cjk> +0xE661 U+8A1B # <cjk> +0xE662 U+8A1D # <cjk> +0xE663 U+8A25 # <cjk> +0xE664 U+8A36 # <cjk> +0xE665 U+8A41 # <cjk> +0xE666 U+8A5B # <cjk> +0xE667 U+8A52 # <cjk> +0xE668 U+8A46 # <cjk> +0xE669 U+8A48 # <cjk> +0xE66A U+8A7C # <cjk> +0xE66B U+8A6D # <cjk> +0xE66C U+8A6C # <cjk> +0xE66D U+8A62 # <cjk> +0xE66E U+8A85 # <cjk> +0xE66F U+8A82 # <cjk> +0xE670 U+8A84 # <cjk> +0xE671 U+8AA8 # <cjk> +0xE672 U+8AA1 # <cjk> +0xE673 U+8A91 # <cjk> +0xE674 U+8AA5 # <cjk> +0xE675 U+8AA6 # <cjk> +0xE676 U+8A9A # <cjk> +0xE677 U+8AA3 # <cjk> +0xE678 U+8AC4 # <cjk> +0xE679 U+8ACD # <cjk> +0xE67A U+8AC2 # <cjk> +0xE67B U+8ADA # <cjk> +0xE67C U+8AEB # <cjk> +0xE67D U+8AF3 # <cjk> +0xE67E U+8AE7 # <cjk> +0xE680 U+8AE4 # <cjk> +0xE681 U+8AF1 # <cjk> +0xE682 U+8B14 # <cjk> +0xE683 U+8AE0 # <cjk> +0xE684 U+8AE2 # <cjk> +0xE685 U+8AF7 # <cjk> +0xE686 U+8ADE # <cjk> +0xE687 U+8ADB # <cjk> +0xE688 U+8B0C # <cjk> +0xE689 U+8B07 # <cjk> +0xE68A U+8B1A # <cjk> +0xE68B U+8AE1 # <cjk> +0xE68C U+8B16 # <cjk> +0xE68D U+8B10 # <cjk> +0xE68E U+8B17 # <cjk> +0xE68F U+8B20 # <cjk> +0xE690 U+8B33 # <cjk> +0xE691 U+97AB # <cjk> +0xE692 U+8B26 # <cjk> +0xE693 U+8B2B # <cjk> +0xE694 U+8B3E # <cjk> +0xE695 U+8B28 # <cjk> +0xE696 U+8B41 # <cjk> +0xE697 U+8B4C # <cjk> +0xE698 U+8B4F # <cjk> +0xE699 U+8B4E # <cjk> +0xE69A U+8B49 # <cjk> +0xE69B U+8B56 # <cjk> +0xE69C U+8B5B # <cjk> +0xE69D U+8B5A # <cjk> +0xE69E U+8B6B # <cjk> +0xE69F U+8B5F # <cjk> +0xE6A0 U+8B6C # <cjk> +0xE6A1 U+8B6F # <cjk> +0xE6A2 U+8B74 # <cjk> +0xE6A3 U+8B7D # <cjk> +0xE6A4 U+8B80 # <cjk> +0xE6A5 U+8B8C # <cjk> +0xE6A6 U+8B8E # <cjk> +0xE6A7 U+8B92 # <cjk> +0xE6A8 U+8B93 # <cjk> +0xE6A9 U+8B96 # <cjk> +0xE6AA U+8B99 # <cjk> +0xE6AB U+8B9A # <cjk> +0xE6AC U+8C3A # <cjk> +0xE6AD U+8C41 # <cjk> +0xE6AE U+8C3F # <cjk> +0xE6AF U+8C48 # <cjk> +0xE6B0 U+8C4C # <cjk> +0xE6B1 U+8C4E # <cjk> +0xE6B2 U+8C50 # <cjk> +0xE6B3 U+8C55 # <cjk> +0xE6B4 U+8C62 # <cjk> +0xE6B5 U+8C6C # <cjk> +0xE6B6 U+8C78 # <cjk> +0xE6B7 U+8C7A # <cjk> +0xE6B8 U+8C82 # <cjk> +0xE6B9 U+8C89 # <cjk> +0xE6BA U+8C85 # <cjk> +0xE6BB U+8C8A # <cjk> +0xE6BC U+8C8D # <cjk> +0xE6BD U+8C8E # <cjk> +0xE6BE U+8C94 # <cjk> +0xE6BF U+8C7C # <cjk> +0xE6C0 U+8C98 # <cjk> +0xE6C1 U+621D # <cjk> +0xE6C2 U+8CAD # <cjk> +0xE6C3 U+8CAA # <cjk> +0xE6C4 U+8CBD # <cjk> +0xE6C5 U+8CB2 # <cjk> +0xE6C6 U+8CB3 # <cjk> +0xE6C7 U+8CAE # <cjk> +0xE6C8 U+8CB6 # <cjk> +0xE6C9 U+8CC8 # <cjk> +0xE6CA U+8CC1 # <cjk> +0xE6CB U+8CE4 # <cjk> +0xE6CC U+8CE3 # <cjk> +0xE6CD U+8CDA # <cjk> +0xE6CE U+8CFD # <cjk> +0xE6CF U+8CFA # <cjk> +0xE6D0 U+8CFB # <cjk> +0xE6D1 U+8D04 # <cjk> +0xE6D2 U+8D05 # <cjk> +0xE6D3 U+8D0A # <cjk> +0xE6D4 U+8D07 # <cjk> +0xE6D5 U+8D0F # <cjk> +0xE6D6 U+8D0D # <cjk> +0xE6D7 U+8D10 # <cjk> +0xE6D8 U+9F4E # <cjk> +0xE6D9 U+8D13 # <cjk> +0xE6DA U+8CCD # <cjk> +0xE6DB U+8D14 # <cjk> +0xE6DC U+8D16 # <cjk> +0xE6DD U+8D67 # <cjk> +0xE6DE U+8D6D # <cjk> +0xE6DF U+8D71 # <cjk> +0xE6E0 U+8D73 # <cjk> +0xE6E1 U+8D81 # <cjk> +0xE6E2 U+8D99 # <cjk> +0xE6E3 U+8DC2 # <cjk> +0xE6E4 U+8DBE # <cjk> +0xE6E5 U+8DBA # <cjk> +0xE6E6 U+8DCF # <cjk> +0xE6E7 U+8DDA # <cjk> +0xE6E8 U+8DD6 # <cjk> +0xE6E9 U+8DCC # <cjk> +0xE6EA U+8DDB # <cjk> +0xE6EB U+8DCB # <cjk> +0xE6EC U+8DEA # <cjk> +0xE6ED U+8DEB # <cjk> +0xE6EE U+8DDF # <cjk> +0xE6EF U+8DE3 # <cjk> +0xE6F0 U+8DFC # <cjk> +0xE6F1 U+8E08 # <cjk> +0xE6F2 U+8E09 # <cjk> +0xE6F3 U+8DFF # <cjk> +0xE6F4 U+8E1D # <cjk> +0xE6F5 U+8E1E # <cjk> +0xE6F6 U+8E10 # <cjk> +0xE6F7 U+8E1F # <cjk> +0xE6F8 U+8E42 # <cjk> +0xE6F9 U+8E35 # <cjk> +0xE6FA U+8E30 # <cjk> +0xE6FB U+8E34 # <cjk> +0xE6FC U+8E4A # <cjk> +0xE740 U+8E47 # <cjk> +0xE741 U+8E49 # <cjk> +0xE742 U+8E4C # <cjk> +0xE743 U+8E50 # <cjk> +0xE744 U+8E48 # <cjk> +0xE745 U+8E59 # <cjk> +0xE746 U+8E64 # <cjk> +0xE747 U+8E60 # <cjk> +0xE748 U+8E2A # <cjk> +0xE749 U+8E63 # <cjk> +0xE74A U+8E55 # <cjk> +0xE74B U+8E76 # <cjk> +0xE74C U+8E72 # <cjk> +0xE74D U+8E7C # <cjk> +0xE74E U+8E81 # <cjk> +0xE74F U+8E87 # <cjk> +0xE750 U+8E85 # <cjk> +0xE751 U+8E84 # <cjk> +0xE752 U+8E8B # <cjk> +0xE753 U+8E8A # <cjk> +0xE754 U+8E93 # <cjk> +0xE755 U+8E91 # <cjk> +0xE756 U+8E94 # <cjk> +0xE757 U+8E99 # <cjk> +0xE758 U+8EAA # <cjk> +0xE759 U+8EA1 # <cjk> +0xE75A U+8EAC # <cjk> +0xE75B U+8EB0 # <cjk> +0xE75C U+8EC6 # <cjk> +0xE75D U+8EB1 # <cjk> +0xE75E U+8EBE # <cjk> +0xE75F U+8EC5 # <cjk> +0xE760 U+8EC8 # <cjk> +0xE761 U+8ECB # <cjk> +0xE762 U+8EDB # <cjk> +0xE763 U+8EE3 # <cjk> +0xE764 U+8EFC # <cjk> +0xE765 U+8EFB # <cjk> +0xE766 U+8EEB # <cjk> +0xE767 U+8EFE # <cjk> +0xE768 U+8F0A # <cjk> +0xE769 U+8F05 # <cjk> +0xE76A U+8F15 # <cjk> +0xE76B U+8F12 # <cjk> +0xE76C U+8F19 # <cjk> +0xE76D U+8F13 # <cjk> +0xE76E U+8F1C # <cjk> +0xE76F U+8F1F # <cjk> +0xE770 U+8F1B # <cjk> +0xE771 U+8F0C # <cjk> +0xE772 U+8F26 # <cjk> +0xE773 U+8F33 # <cjk> +0xE774 U+8F3B # <cjk> +0xE775 U+8F39 # <cjk> +0xE776 U+8F45 # <cjk> +0xE777 U+8F42 # <cjk> +0xE778 U+8F3E # <cjk> +0xE779 U+8F4C # <cjk> +0xE77A U+8F49 # <cjk> +0xE77B U+8F46 # <cjk> +0xE77C U+8F4E # <cjk> +0xE77D U+8F57 # <cjk> +0xE77E U+8F5C # <cjk> +0xE780 U+8F62 # <cjk> +0xE781 U+8F63 # <cjk> +0xE782 U+8F64 # <cjk> +0xE783 U+8F9C # <cjk> +0xE784 U+8F9F # <cjk> +0xE785 U+8FA3 # <cjk> +0xE786 U+8FAD # <cjk> +0xE787 U+8FAF # <cjk> +0xE788 U+8FB7 # <cjk> +0xE789 U+8FDA # <cjk> +0xE78A U+8FE5 # <cjk> +0xE78B U+8FE2 # <cjk> +0xE78C U+8FEA # <cjk> +0xE78D U+8FEF # <cjk> +0xE78E U+9087 # <cjk> +0xE78F U+8FF4 # <cjk> +0xE790 U+9005 # <cjk> +0xE791 U+8FF9 # <cjk> +0xE792 U+8FFA # <cjk> +0xE793 U+9011 # <cjk> +0xE794 U+9015 # <cjk> +0xE795 U+9021 # <cjk> +0xE796 U+900D # <cjk> +0xE797 U+901E # <cjk> +0xE798 U+9016 # <cjk> +0xE799 U+900B # <cjk> +0xE79A U+9027 # <cjk> +0xE79B U+9036 # <cjk> +0xE79C U+9035 # <cjk> +0xE79D U+9039 # <cjk> +0xE79E U+8FF8 # <cjk> +0xE79F U+904F # <cjk> +0xE7A0 U+9050 # <cjk> +0xE7A1 U+9051 # <cjk> +0xE7A2 U+9052 # <cjk> +0xE7A3 U+900E # <cjk> +0xE7A4 U+9049 # <cjk> +0xE7A5 U+903E # <cjk> +0xE7A6 U+9056 # <cjk> +0xE7A7 U+9058 # <cjk> +0xE7A8 U+905E # <cjk> +0xE7A9 U+9068 # <cjk> +0xE7AA U+906F # <cjk> +0xE7AB U+9076 # <cjk> +0xE7AC U+96A8 # <cjk> +0xE7AD U+9072 # <cjk> +0xE7AE U+9082 # <cjk> +0xE7AF U+907D # <cjk> +0xE7B0 U+9081 # <cjk> +0xE7B1 U+9080 # <cjk> +0xE7B2 U+908A # <cjk> +0xE7B3 U+9089 # <cjk> +0xE7B4 U+908F # <cjk> +0xE7B5 U+90A8 # <cjk> +0xE7B6 U+90AF # <cjk> +0xE7B7 U+90B1 # <cjk> +0xE7B8 U+90B5 # <cjk> +0xE7B9 U+90E2 # <cjk> +0xE7BA U+90E4 # <cjk> +0xE7BB U+6248 # <cjk> +0xE7BC U+90DB # <cjk> +0xE7BD U+9102 # <cjk> +0xE7BE U+9112 # <cjk> +0xE7BF U+9119 # <cjk> +0xE7C0 U+9132 # <cjk> +0xE7C1 U+9130 # <cjk> +0xE7C2 U+914A # <cjk> +0xE7C3 U+9156 # <cjk> +0xE7C4 U+9158 # <cjk> +0xE7C5 U+9163 # <cjk> +0xE7C6 U+9165 # <cjk> +0xE7C7 U+9169 # <cjk> +0xE7C8 U+9173 # <cjk> +0xE7C9 U+9172 # <cjk> +0xE7CA U+918B # <cjk> +0xE7CB U+9189 # <cjk> +0xE7CC U+9182 # <cjk> +0xE7CD U+91A2 # <cjk> +0xE7CE U+91AB # <cjk> +0xE7CF U+91AF # <cjk> +0xE7D0 U+91AA # <cjk> +0xE7D1 U+91B5 # <cjk> +0xE7D2 U+91B4 # <cjk> +0xE7D3 U+91BA # <cjk> +0xE7D4 U+91C0 # <cjk> +0xE7D5 U+91C1 # <cjk> +0xE7D6 U+91C9 # <cjk> +0xE7D7 U+91CB # <cjk> +0xE7D8 U+91D0 # <cjk> +0xE7D9 U+91D6 # <cjk> +0xE7DA U+91DF # <cjk> +0xE7DB U+91E1 # <cjk> +0xE7DC U+91DB # <cjk> +0xE7DD U+91FC # <cjk> +0xE7DE U+91F5 # <cjk> +0xE7DF U+91F6 # <cjk> +0xE7E0 U+921E # <cjk> +0xE7E1 U+91FF # <cjk> +0xE7E2 U+9214 # <cjk> +0xE7E3 U+922C # <cjk> +0xE7E4 U+9215 # <cjk> +0xE7E5 U+9211 # <cjk> +0xE7E6 U+925E # <cjk> +0xE7E7 U+9257 # <cjk> +0xE7E8 U+9245 # <cjk> +0xE7E9 U+9249 # <cjk> +0xE7EA U+9264 # <cjk> +0xE7EB U+9248 # <cjk> +0xE7EC U+9295 # <cjk> +0xE7ED U+923F # <cjk> +0xE7EE U+924B # <cjk> +0xE7EF U+9250 # <cjk> +0xE7F0 U+929C # <cjk> +0xE7F1 U+9296 # <cjk> +0xE7F2 U+9293 # <cjk> +0xE7F3 U+929B # <cjk> +0xE7F4 U+925A # <cjk> +0xE7F5 U+92CF # <cjk> +0xE7F6 U+92B9 # <cjk> +0xE7F7 U+92B7 # <cjk> +0xE7F8 U+92E9 # <cjk> +0xE7F9 U+930F # <cjk> +0xE7FA U+92FA # <cjk> +0xE7FB U+9344 # <cjk> +0xE7FC U+932E # <cjk> +0xE840 U+9319 # <cjk> +0xE841 U+9322 # <cjk> +0xE842 U+931A # <cjk> +0xE843 U+9323 # <cjk> +0xE844 U+933A # <cjk> +0xE845 U+9335 # <cjk> +0xE846 U+933B # <cjk> +0xE847 U+935C # <cjk> +0xE848 U+9360 # <cjk> +0xE849 U+937C # <cjk> +0xE84A U+936E # <cjk> +0xE84B U+9356 # <cjk> +0xE84C U+93B0 # <cjk> +0xE84D U+93AC # <cjk> +0xE84E U+93AD # <cjk> +0xE84F U+9394 # <cjk> +0xE850 U+93B9 # <cjk> +0xE851 U+93D6 # <cjk> +0xE852 U+93D7 # <cjk> +0xE853 U+93E8 # <cjk> +0xE854 U+93E5 # <cjk> +0xE855 U+93D8 # <cjk> +0xE856 U+93C3 # <cjk> +0xE857 U+93DD # <cjk> +0xE858 U+93D0 # <cjk> +0xE859 U+93C8 # <cjk> +0xE85A U+93E4 # <cjk> +0xE85B U+941A # <cjk> +0xE85C U+9414 # <cjk> +0xE85D U+9413 # <cjk> +0xE85E U+9403 # <cjk> +0xE85F U+9407 # <cjk> +0xE860 U+9410 # <cjk> +0xE861 U+9436 # <cjk> +0xE862 U+942B # <cjk> +0xE863 U+9435 # <cjk> +0xE864 U+9421 # <cjk> +0xE865 U+943A # <cjk> +0xE866 U+9441 # <cjk> +0xE867 U+9452 # <cjk> +0xE868 U+9444 # <cjk> +0xE869 U+945B # <cjk> +0xE86A U+9460 # <cjk> +0xE86B U+9462 # <cjk> +0xE86C U+945E # <cjk> +0xE86D U+946A # <cjk> +0xE86E U+9229 # <cjk> +0xE86F U+9470 # <cjk> +0xE870 U+9475 # <cjk> +0xE871 U+9477 # <cjk> +0xE872 U+947D # <cjk> +0xE873 U+945A # <cjk> +0xE874 U+947C # <cjk> +0xE875 U+947E # <cjk> +0xE876 U+9481 # <cjk> +0xE877 U+947F # <cjk> +0xE878 U+9582 # <cjk> +0xE879 U+9587 # <cjk> +0xE87A U+958A # <cjk> +0xE87B U+9594 # <cjk> +0xE87C U+9596 # <cjk> +0xE87D U+9598 # <cjk> +0xE87E U+9599 # <cjk> +0xE880 U+95A0 # <cjk> +0xE881 U+95A8 # <cjk> +0xE882 U+95A7 # <cjk> +0xE883 U+95AD # <cjk> +0xE884 U+95BC # <cjk> +0xE885 U+95BB # <cjk> +0xE886 U+95B9 # <cjk> +0xE887 U+95BE # <cjk> +0xE888 U+95CA # <cjk> +0xE889 U+6FF6 # <cjk> +0xE88A U+95C3 # <cjk> +0xE88B U+95CD # <cjk> +0xE88C U+95CC # <cjk> +0xE88D U+95D5 # <cjk> +0xE88E U+95D4 # <cjk> +0xE88F U+95D6 # <cjk> +0xE890 U+95DC # <cjk> +0xE891 U+95E1 # <cjk> +0xE892 U+95E5 # <cjk> +0xE893 U+95E2 # <cjk> +0xE894 U+9621 # <cjk> +0xE895 U+9628 # <cjk> +0xE896 U+962E # <cjk> +0xE897 U+962F # <cjk> +0xE898 U+9642 # <cjk> +0xE899 U+964C # <cjk> +0xE89A U+964F # <cjk> +0xE89B U+964B # <cjk> +0xE89C U+9677 # <cjk> +0xE89D U+965C # <cjk> +0xE89E U+965E # <cjk> +0xE89F U+965D # <cjk> +0xE8A0 U+965F # <cjk> +0xE8A1 U+9666 # <cjk> +0xE8A2 U+9672 # <cjk> +0xE8A3 U+966C # <cjk> +0xE8A4 U+968D # <cjk> +0xE8A5 U+9698 # <cjk> +0xE8A6 U+9695 # <cjk> +0xE8A7 U+9697 # <cjk> +0xE8A8 U+96AA # <cjk> +0xE8A9 U+96A7 # <cjk> +0xE8AA U+96B1 # <cjk> +0xE8AB U+96B2 # <cjk> +0xE8AC U+96B0 # <cjk> +0xE8AD U+96B4 # <cjk> +0xE8AE U+96B6 # <cjk> +0xE8AF U+96B8 # <cjk> +0xE8B0 U+96B9 # <cjk> +0xE8B1 U+96CE # <cjk> +0xE8B2 U+96CB # <cjk> +0xE8B3 U+96C9 # <cjk> +0xE8B4 U+96CD # <cjk> +0xE8B5 U+894D # <cjk> +0xE8B6 U+96DC # <cjk> +0xE8B7 U+970D # <cjk> +0xE8B8 U+96D5 # <cjk> +0xE8B9 U+96F9 # <cjk> +0xE8BA U+9704 # <cjk> +0xE8BB U+9706 # <cjk> +0xE8BC U+9708 # <cjk> +0xE8BD U+9713 # <cjk> +0xE8BE U+970E # <cjk> +0xE8BF U+9711 # <cjk> +0xE8C0 U+970F # <cjk> +0xE8C1 U+9716 # <cjk> +0xE8C2 U+9719 # <cjk> +0xE8C3 U+9724 # <cjk> +0xE8C4 U+972A # <cjk> +0xE8C5 U+9730 # <cjk> +0xE8C6 U+9739 # <cjk> +0xE8C7 U+973D # <cjk> +0xE8C8 U+973E # <cjk> +0xE8C9 U+9744 # <cjk> +0xE8CA U+9746 # <cjk> +0xE8CB U+9748 # <cjk> +0xE8CC U+9742 # <cjk> +0xE8CD U+9749 # <cjk> +0xE8CE U+975C # <cjk> +0xE8CF U+9760 # <cjk> +0xE8D0 U+9764 # <cjk> +0xE8D1 U+9766 # <cjk> +0xE8D2 U+9768 # <cjk> +0xE8D3 U+52D2 # <cjk> +0xE8D4 U+976B # <cjk> +0xE8D5 U+9771 # <cjk> +0xE8D6 U+9779 # <cjk> +0xE8D7 U+9785 # <cjk> +0xE8D8 U+977C # <cjk> +0xE8D9 U+9781 # <cjk> +0xE8DA U+977A # <cjk> +0xE8DB U+9786 # <cjk> +0xE8DC U+978B # <cjk> +0xE8DD U+978F # <cjk> +0xE8DE U+9790 # <cjk> +0xE8DF U+979C # <cjk> +0xE8E0 U+97A8 # <cjk> +0xE8E1 U+97A6 # <cjk> +0xE8E2 U+97A3 # <cjk> +0xE8E3 U+97B3 # <cjk> +0xE8E4 U+97B4 # <cjk> +0xE8E5 U+97C3 # <cjk> +0xE8E6 U+97C6 # <cjk> +0xE8E7 U+97C8 # <cjk> +0xE8E8 U+97CB # <cjk> +0xE8E9 U+97DC # <cjk> +0xE8EA U+97ED # <cjk> +0xE8EB U+9F4F # <cjk> +0xE8EC U+97F2 # <cjk> +0xE8ED U+7ADF # <cjk> +0xE8EE U+97F6 # <cjk> +0xE8EF U+97F5 # <cjk> +0xE8F0 U+980F # <cjk> +0xE8F1 U+980C # <cjk> +0xE8F2 U+9838 # <cjk> +0xE8F3 U+9824 # <cjk> +0xE8F4 U+9821 # <cjk> +0xE8F5 U+9837 # <cjk> +0xE8F6 U+983D # <cjk> +0xE8F7 U+9846 # <cjk> +0xE8F8 U+984F # <cjk> +0xE8F9 U+984B # <cjk> +0xE8FA U+986B # <cjk> +0xE8FB U+986F # <cjk> +0xE8FC U+9870 # <cjk> +0xE940 U+9871 # <cjk> +0xE941 U+9874 # <cjk> +0xE942 U+9873 # <cjk> +0xE943 U+98AA # <cjk> +0xE944 U+98AF # <cjk> +0xE945 U+98B1 # <cjk> +0xE946 U+98B6 # <cjk> +0xE947 U+98C4 # <cjk> +0xE948 U+98C3 # <cjk> +0xE949 U+98C6 # <cjk> +0xE94A U+98E9 # <cjk> +0xE94B U+98EB # <cjk> +0xE94C U+9903 # <cjk> +0xE94D U+9909 # <cjk> +0xE94E U+9912 # <cjk> +0xE94F U+9914 # <cjk> +0xE950 U+9918 # <cjk> +0xE951 U+9921 # <cjk> +0xE952 U+991D # <cjk> +0xE953 U+991E # <cjk> +0xE954 U+9924 # <cjk> +0xE955 U+9920 # <cjk> +0xE956 U+992C # <cjk> +0xE957 U+992E # <cjk> +0xE958 U+993D # <cjk> +0xE959 U+993E # <cjk> +0xE95A U+9942 # <cjk> +0xE95B U+9949 # <cjk> +0xE95C U+9945 # <cjk> +0xE95D U+9950 # <cjk> +0xE95E U+994B # <cjk> +0xE95F U+9951 # <cjk> +0xE960 U+9952 # <cjk> +0xE961 U+994C # <cjk> +0xE962 U+9955 # <cjk> +0xE963 U+9997 # <cjk> +0xE964 U+9998 # <cjk> +0xE965 U+99A5 # <cjk> +0xE966 U+99AD # <cjk> +0xE967 U+99AE # <cjk> +0xE968 U+99BC # <cjk> +0xE969 U+99DF # <cjk> +0xE96A U+99DB # <cjk> +0xE96B U+99DD # <cjk> +0xE96C U+99D8 # <cjk> +0xE96D U+99D1 # <cjk> +0xE96E U+99ED # <cjk> +0xE96F U+99EE # <cjk> +0xE970 U+99F1 # <cjk> +0xE971 U+99F2 # <cjk> +0xE972 U+99FB # <cjk> +0xE973 U+99F8 # <cjk> +0xE974 U+9A01 # <cjk> +0xE975 U+9A0F # <cjk> +0xE976 U+9A05 # <cjk> +0xE977 U+99E2 # <cjk> +0xE978 U+9A19 # <cjk> +0xE979 U+9A2B # <cjk> +0xE97A U+9A37 # <cjk> +0xE97B U+9A45 # <cjk> +0xE97C U+9A42 # <cjk> +0xE97D U+9A40 # <cjk> +0xE97E U+9A43 # <cjk> +0xE980 U+9A3E # <cjk> +0xE981 U+9A55 # <cjk> +0xE982 U+9A4D # <cjk> +0xE983 U+9A5B # <cjk> +0xE984 U+9A57 # <cjk> +0xE985 U+9A5F # <cjk> +0xE986 U+9A62 # <cjk> +0xE987 U+9A65 # <cjk> +0xE988 U+9A64 # <cjk> +0xE989 U+9A69 # <cjk> +0xE98A U+9A6B # <cjk> +0xE98B U+9A6A # <cjk> +0xE98C U+9AAD # <cjk> +0xE98D U+9AB0 # <cjk> +0xE98E U+9ABC # <cjk> +0xE98F U+9AC0 # <cjk> +0xE990 U+9ACF # <cjk> +0xE991 U+9AD1 # <cjk> +0xE992 U+9AD3 # <cjk> +0xE993 U+9AD4 # <cjk> +0xE994 U+9ADE # <cjk> +0xE995 U+9ADF # <cjk> +0xE996 U+9AE2 # <cjk> +0xE997 U+9AE3 # <cjk> +0xE998 U+9AE6 # <cjk> +0xE999 U+9AEF # <cjk> +0xE99A U+9AEB # <cjk> +0xE99B U+9AEE # <cjk> +0xE99C U+9AF4 # <cjk> +0xE99D U+9AF1 # <cjk> +0xE99E U+9AF7 # <cjk> +0xE99F U+9AFB # <cjk> +0xE9A0 U+9B06 # <cjk> +0xE9A1 U+9B18 # <cjk> +0xE9A2 U+9B1A # <cjk> +0xE9A3 U+9B1F # <cjk> +0xE9A4 U+9B22 # <cjk> +0xE9A5 U+9B23 # <cjk> +0xE9A6 U+9B25 # <cjk> +0xE9A7 U+9B27 # <cjk> +0xE9A8 U+9B28 # <cjk> +0xE9A9 U+9B29 # <cjk> +0xE9AA U+9B2A # <cjk> +0xE9AB U+9B2E # <cjk> +0xE9AC U+9B2F # <cjk> +0xE9AD U+9B32 # <cjk> +0xE9AE U+9B44 # <cjk> +0xE9AF U+9B43 # <cjk> +0xE9B0 U+9B4F # <cjk> +0xE9B1 U+9B4D # <cjk> +0xE9B2 U+9B4E # <cjk> +0xE9B3 U+9B51 # <cjk> +0xE9B4 U+9B58 # <cjk> +0xE9B5 U+9B74 # <cjk> +0xE9B6 U+9B93 # <cjk> +0xE9B7 U+9B83 # <cjk> +0xE9B8 U+9B91 # <cjk> +0xE9B9 U+9B96 # <cjk> +0xE9BA U+9B97 # <cjk> +0xE9BB U+9B9F # <cjk> +0xE9BC U+9BA0 # <cjk> +0xE9BD U+9BA8 # <cjk> +0xE9BE U+9BB4 # <cjk> +0xE9BF U+9BC0 # <cjk> +0xE9C0 U+9BCA # <cjk> +0xE9C1 U+9BB9 # <cjk> +0xE9C2 U+9BC6 # <cjk> +0xE9C3 U+9BCF # <cjk> +0xE9C4 U+9BD1 # <cjk> +0xE9C5 U+9BD2 # <cjk> +0xE9C6 U+9BE3 # <cjk> +0xE9C7 U+9BE2 # <cjk> +0xE9C8 U+9BE4 # <cjk> +0xE9C9 U+9BD4 # <cjk> +0xE9CA U+9BE1 # <cjk> +0xE9CB U+9C3A # <cjk> +0xE9CC U+9BF2 # <cjk> +0xE9CD U+9BF1 # <cjk> +0xE9CE U+9BF0 # <cjk> +0xE9CF U+9C15 # <cjk> +0xE9D0 U+9C14 # <cjk> +0xE9D1 U+9C09 # <cjk> +0xE9D2 U+9C13 # <cjk> +0xE9D3 U+9C0C # <cjk> +0xE9D4 U+9C06 # <cjk> +0xE9D5 U+9C08 # <cjk> +0xE9D6 U+9C12 # <cjk> +0xE9D7 U+9C0A # <cjk> +0xE9D8 U+9C04 # <cjk> +0xE9D9 U+9C2E # <cjk> +0xE9DA U+9C1B # <cjk> +0xE9DB U+9C25 # <cjk> +0xE9DC U+9C24 # <cjk> +0xE9DD U+9C21 # <cjk> +0xE9DE U+9C30 # <cjk> +0xE9DF U+9C47 # <cjk> +0xE9E0 U+9C32 # <cjk> +0xE9E1 U+9C46 # <cjk> +0xE9E2 U+9C3E # <cjk> +0xE9E3 U+9C5A # <cjk> +0xE9E4 U+9C60 # <cjk> +0xE9E5 U+9C67 # <cjk> +0xE9E6 U+9C76 # <cjk> +0xE9E7 U+9C78 # <cjk> +0xE9E8 U+9CE7 # <cjk> +0xE9E9 U+9CEC # <cjk> +0xE9EA U+9CF0 # <cjk> +0xE9EB U+9D09 # <cjk> +0xE9EC U+9D08 # <cjk> +0xE9ED U+9CEB # <cjk> +0xE9EE U+9D03 # <cjk> +0xE9EF U+9D06 # <cjk> +0xE9F0 U+9D2A # <cjk> +0xE9F1 U+9D26 # <cjk> +0xE9F2 U+9DAF # <cjk> +0xE9F3 U+9D23 # <cjk> +0xE9F4 U+9D1F # <cjk> +0xE9F5 U+9D44 # <cjk> +0xE9F6 U+9D15 # <cjk> +0xE9F7 U+9D12 # <cjk> +0xE9F8 U+9D41 # <cjk> +0xE9F9 U+9D3F # <cjk> +0xE9FA U+9D3E # <cjk> +0xE9FB U+9D46 # <cjk> +0xE9FC U+9D48 # <cjk> +0xEA40 U+9D5D # <cjk> +0xEA41 U+9D5E # <cjk> +0xEA42 U+9D64 # <cjk> +0xEA43 U+9D51 # <cjk> +0xEA44 U+9D50 # <cjk> +0xEA45 U+9D59 # <cjk> +0xEA46 U+9D72 # <cjk> +0xEA47 U+9D89 # <cjk> +0xEA48 U+9D87 # <cjk> +0xEA49 U+9DAB # <cjk> +0xEA4A U+9D6F # <cjk> +0xEA4B U+9D7A # <cjk> +0xEA4C U+9D9A # <cjk> +0xEA4D U+9DA4 # <cjk> +0xEA4E U+9DA9 # <cjk> +0xEA4F U+9DB2 # <cjk> +0xEA50 U+9DC4 # <cjk> +0xEA51 U+9DC1 # <cjk> +0xEA52 U+9DBB # <cjk> +0xEA53 U+9DB8 # <cjk> +0xEA54 U+9DBA # <cjk> +0xEA55 U+9DC6 # <cjk> +0xEA56 U+9DCF # <cjk> +0xEA57 U+9DC2 # <cjk> +0xEA58 U+9DD9 # <cjk> +0xEA59 U+9DD3 # <cjk> +0xEA5A U+9DF8 # <cjk> +0xEA5B U+9DE6 # <cjk> +0xEA5C U+9DED # <cjk> +0xEA5D U+9DEF # <cjk> +0xEA5E U+9DFD # <cjk> +0xEA5F U+9E1A # <cjk> +0xEA60 U+9E1B # <cjk> +0xEA61 U+9E1E # <cjk> +0xEA62 U+9E75 # <cjk> +0xEA63 U+9E79 # <cjk> +0xEA64 U+9E7D # <cjk> +0xEA65 U+9E81 # <cjk> +0xEA66 U+9E88 # <cjk> +0xEA67 U+9E8B # <cjk> +0xEA68 U+9E8C # <cjk> +0xEA69 U+9E92 # <cjk> +0xEA6A U+9E95 # <cjk> +0xEA6B U+9E91 # <cjk> +0xEA6C U+9E9D # <cjk> +0xEA6D U+9EA5 # <cjk> +0xEA6E U+9EA9 # <cjk> +0xEA6F U+9EB8 # <cjk> +0xEA70 U+9EAA # <cjk> +0xEA71 U+9EAD # <cjk> +0xEA72 U+9761 # <cjk> +0xEA73 U+9ECC # <cjk> +0xEA74 U+9ECE # <cjk> +0xEA75 U+9ECF # <cjk> +0xEA76 U+9ED0 # <cjk> +0xEA77 U+9ED4 # <cjk> +0xEA78 U+9EDC # <cjk> +0xEA79 U+9EDE # <cjk> +0xEA7A U+9EDD # <cjk> +0xEA7B U+9EE0 # <cjk> +0xEA7C U+9EE5 # <cjk> +0xEA7D U+9EE8 # <cjk> +0xEA7E U+9EEF # <cjk> +0xEA80 U+9EF4 # <cjk> +0xEA81 U+9EF6 # <cjk> +0xEA82 U+9EF7 # <cjk> +0xEA83 U+9EF9 # <cjk> +0xEA84 U+9EFB # <cjk> +0xEA85 U+9EFC # <cjk> +0xEA86 U+9EFD # <cjk> +0xEA87 U+9F07 # <cjk> +0xEA88 U+9F08 # <cjk> +0xEA89 U+76B7 # <cjk> +0xEA8A U+9F15 # <cjk> +0xEA8B U+9F21 # <cjk> +0xEA8C U+9F2C # <cjk> +0xEA8D U+9F3E # <cjk> +0xEA8E U+9F4A # <cjk> +0xEA8F U+9F52 # <cjk> +0xEA90 U+9F54 # <cjk> +0xEA91 U+9F63 # <cjk> +0xEA92 U+9F5F # <cjk> +0xEA93 U+9F60 # <cjk> +0xEA94 U+9F61 # <cjk> +0xEA95 U+9F66 # <cjk> +0xEA96 U+9F67 # <cjk> +0xEA97 U+9F6C # <cjk> +0xEA98 U+9F6A # <cjk> +0xEA99 U+9F77 # <cjk> +0xEA9A U+9F72 # <cjk> +0xEA9B U+9F76 # <cjk> +0xEA9C U+9F95 # <cjk> +0xEA9D U+9F9C # <cjk> +0xEA9E U+9FA0 # <cjk> +0xEA9F U+582F # <cjk> [1983] +0xEAA0 U+69C7 # <cjk> [1983] +0xEAA1 U+9059 # <cjk> [1983] +0xEAA2 U+7464 # <cjk> [1983] +0xEAA3 U+51DC # <cjk> [1990] +0xEAA4 U+7199 # <cjk> [1990] +0xEAA5 U+5653 # <cjk> [2004] +0xEAA6 U+5DE2 # <cjk> [2000] +0xEAA7 U+5E14 # <cjk> [2000] +0xEAA8 U+5E18 # <cjk> [2000] +0xEAA9 U+5E58 # <cjk> [2000] +0xEAAA U+5E5E # <cjk> [2000] +0xEAAB U+5EBE # <cjk> [2000] +0xEAAC U+F928 # CJK COMPATIBILITY IDEOGRAPH-F928 [2000] +0xEAAD U+5ECB # <cjk> [2000] +0xEAAE U+5EF9 # <cjk> [2000] +0xEAAF U+5F00 # <cjk> [2000] +0xEAB0 U+5F02 # <cjk> [2000] +0xEAB1 U+5F07 # <cjk> [2000] +0xEAB2 U+5F1D # <cjk> [2000] +0xEAB3 U+5F23 # <cjk> [2000] +0xEAB4 U+5F34 # <cjk> [2000] +0xEAB5 U+5F36 # <cjk> [2000] +0xEAB6 U+5F3D # <cjk> [2000] +0xEAB7 U+5F40 # <cjk> [2000] +0xEAB8 U+5F45 # <cjk> [2000] +0xEAB9 U+5F54 # <cjk> [2000] +0xEABA U+5F58 # <cjk> [2000] +0xEABB U+5F64 # <cjk> [2000] +0xEABC U+5F67 # <cjk> [2000] +0xEABD U+5F7D # <cjk> [2000] +0xEABE U+5F89 # <cjk> [2000] +0xEABF U+5F9C # <cjk> [2000] +0xEAC0 U+5FA7 # <cjk> [2000] +0xEAC1 U+5FAF # <cjk> [2000] +0xEAC2 U+5FB5 # <cjk> [2000] +0xEAC3 U+5FB7 # <cjk> [2000] +0xEAC4 U+5FC9 # <cjk> [2000] +0xEAC5 U+5FDE # <cjk> [2000] +0xEAC6 U+5FE1 # <cjk> [2000] +0xEAC7 U+5FE9 # <cjk> [2000] +0xEAC8 U+600D # <cjk> [2000] +0xEAC9 U+6014 # <cjk> [2000] +0xEACA U+6018 # <cjk> [2000] +0xEACB U+6033 # <cjk> [2000] +0xEACC U+6035 # <cjk> [2000] +0xEACD U+6047 # <cjk> [2000] +0xEACE U+FA3D # CJK COMPATIBILITY IDEOGRAPH-FA3D [2000] [Unicode3.2] +0xEACF U+609D # <cjk> [2000] +0xEAD0 U+609E # <cjk> [2000] +0xEAD1 U+60CB # <cjk> [2000] +0xEAD2 U+60D4 # <cjk> [2000] +0xEAD3 U+60D5 # <cjk> [2000] +0xEAD4 U+60DD # <cjk> [2000] +0xEAD5 U+60F8 # <cjk> [2000] +0xEAD6 U+611C # <cjk> [2000] +0xEAD7 U+612B # <cjk> [2000] +0xEAD8 U+6130 # <cjk> [2000] +0xEAD9 U+6137 # <cjk> [2000] +0xEADA U+FA3E # CJK COMPATIBILITY IDEOGRAPH-FA3E [2000] [Unicode3.2] +0xEADB U+618D # <cjk> [2000] +0xEADC U+FA3F # CJK COMPATIBILITY IDEOGRAPH-FA3F [2000] [Unicode3.2] +0xEADD U+61BC # <cjk> [2000] +0xEADE U+61B9 # <cjk> [2000] +0xEADF U+FA40 # CJK COMPATIBILITY IDEOGRAPH-FA40 [2000] [Unicode3.2] +0xEAE0 U+6222 # <cjk> [2000] +0xEAE1 U+623E # <cjk> [2000] +0xEAE2 U+6243 # <cjk> [2000] +0xEAE3 U+6256 # <cjk> [2000] +0xEAE4 U+625A # <cjk> [2000] +0xEAE5 U+626F # <cjk> [2000] +0xEAE6 U+6285 # <cjk> [2000] +0xEAE7 U+62C4 # <cjk> [2000] +0xEAE8 U+62D6 # <cjk> [2000] +0xEAE9 U+62FC # <cjk> [2000] +0xEAEA U+630A # <cjk> [2000] +0xEAEB U+6318 # <cjk> [2000] +0xEAEC U+6339 # <cjk> [2000] +0xEAED U+6343 # <cjk> [2000] +0xEAEE U+6365 # <cjk> [2000] +0xEAEF U+637C # <cjk> [2000] +0xEAF0 U+63E5 # <cjk> [2000] +0xEAF1 U+63ED # <cjk> [2000] +0xEAF2 U+63F5 # <cjk> [2000] +0xEAF3 U+6410 # <cjk> [2000] +0xEAF4 U+6414 # <cjk> [2000] +0xEAF5 U+6422 # <cjk> [2000] +0xEAF6 U+6479 # <cjk> [2000] +0xEAF7 U+6451 # <cjk> [2000] +0xEAF8 U+6460 # <cjk> [2000] +0xEAF9 U+646D # <cjk> [2000] +0xEAFA U+64CE # <cjk> [2000] +0xEAFB U+64BE # <cjk> [2000] +0xEAFC U+64BF # <cjk> [2000] +0xEB40 U+64C4 # <cjk> [2000] +0xEB41 U+64CA # <cjk> [2000] +0xEB42 U+64D0 # <cjk> [2000] +0xEB43 U+64F7 # <cjk> [2000] +0xEB44 U+64FB # <cjk> [2000] +0xEB45 U+6522 # <cjk> [2000] +0xEB46 U+6529 # <cjk> [2000] +0xEB47 U+FA41 # CJK COMPATIBILITY IDEOGRAPH-FA41 [2000] [Unicode3.2] +0xEB48 U+6567 # <cjk> [2000] +0xEB49 U+659D # <cjk> [2000] +0xEB4A U+FA42 # CJK COMPATIBILITY IDEOGRAPH-FA42 [2000] [Unicode3.2] +0xEB4B U+6600 # <cjk> [2000] +0xEB4C U+6609 # <cjk> [2000] +0xEB4D U+6615 # <cjk> [2000] +0xEB4E U+661E # <cjk> [2000] +0xEB4F U+663A # <cjk> [2000] +0xEB50 U+6622 # <cjk> [2000] +0xEB51 U+6624 # <cjk> [2000] +0xEB52 U+662B # <cjk> [2000] +0xEB53 U+6630 # <cjk> [2000] +0xEB54 U+6631 # <cjk> [2000] +0xEB55 U+6633 # <cjk> [2000] +0xEB56 U+66FB # <cjk> [2000] +0xEB57 U+6648 # <cjk> [2000] +0xEB58 U+664C # <cjk> [2000] +0xEB59 U+231C4 # <cjk> [2000] [Unicode3.1] +0xEB5A U+6659 # <cjk> [2000] +0xEB5B U+665A # <cjk> [2000] +0xEB5C U+6661 # <cjk> [2000] +0xEB5D U+6665 # <cjk> [2000] +0xEB5E U+6673 # <cjk> [2000] +0xEB5F U+6677 # <cjk> [2000] +0xEB60 U+6678 # <cjk> [2000] +0xEB61 U+668D # <cjk> [2000] +0xEB62 U+FA43 # CJK COMPATIBILITY IDEOGRAPH-FA43 [2000] [Unicode3.2] +0xEB63 U+66A0 # <cjk> [2000] +0xEB64 U+66B2 # <cjk> [2000] +0xEB65 U+66BB # <cjk> [2000] +0xEB66 U+66C6 # <cjk> [2000] +0xEB67 U+66C8 # <cjk> [2000] +0xEB68 U+3B22 # <cjk> [2000] +0xEB69 U+66DB # <cjk> [2000] +0xEB6A U+66E8 # <cjk> [2000] +0xEB6B U+66FA # <cjk> [2000] +0xEB6C U+6713 # <cjk> [2000] +0xEB6D U+F929 # CJK COMPATIBILITY IDEOGRAPH-F929 [2000] +0xEB6E U+6733 # <cjk> [2000] +0xEB6F U+6766 # <cjk> [2000] +0xEB70 U+6747 # <cjk> [2000] +0xEB71 U+6748 # <cjk> [2000] +0xEB72 U+677B # <cjk> [2000] +0xEB73 U+6781 # <cjk> [2000] +0xEB74 U+6793 # <cjk> [2000] +0xEB75 U+6798 # <cjk> [2000] +0xEB76 U+679B # <cjk> [2000] +0xEB77 U+67BB # <cjk> [2000] +0xEB78 U+67F9 # <cjk> [2000] +0xEB79 U+67C0 # <cjk> [2000] +0xEB7A U+67D7 # <cjk> [2000] +0xEB7B U+67FC # <cjk> [2000] +0xEB7C U+6801 # <cjk> [2000] +0xEB7D U+6852 # <cjk> [2000] +0xEB7E U+681D # <cjk> [2000] +0xEB80 U+682C # <cjk> [2000] +0xEB81 U+6831 # <cjk> [2000] +0xEB82 U+685B # <cjk> [2000] +0xEB83 U+6872 # <cjk> [2000] +0xEB84 U+6875 # <cjk> [2000] +0xEB85 U+FA44 # CJK COMPATIBILITY IDEOGRAPH-FA44 [2000] [Unicode3.2] +0xEB86 U+68A3 # <cjk> [2000] +0xEB87 U+68A5 # <cjk> [2000] +0xEB88 U+68B2 # <cjk> [2000] +0xEB89 U+68C8 # <cjk> [2000] +0xEB8A U+68D0 # <cjk> [2000] +0xEB8B U+68E8 # <cjk> [2000] +0xEB8C U+68ED # <cjk> [2000] +0xEB8D U+68F0 # <cjk> [2000] +0xEB8E U+68F1 # <cjk> [2000] +0xEB8F U+68FC # <cjk> [2000] +0xEB90 U+690A # <cjk> [2000] +0xEB91 U+6949 # <cjk> [2000] +0xEB92 U+235C4 # <cjk> [2000] [Unicode3.1] +0xEB93 U+6935 # <cjk> [2000] +0xEB94 U+6942 # <cjk> [2000] +0xEB95 U+6957 # <cjk> [2000] +0xEB96 U+6963 # <cjk> [2000] +0xEB97 U+6964 # <cjk> [2000] +0xEB98 U+6968 # <cjk> [2000] +0xEB99 U+6980 # <cjk> [2000] +0xEB9A U+FA14 # CJK COMPATIBILITY IDEOGRAPH-FA14 [2000] +0xEB9B U+69A5 # <cjk> [2000] +0xEB9C U+69AD # <cjk> [2000] +0xEB9D U+69CF # <cjk> [2000] +0xEB9E U+3BB6 # <cjk> [2000] +0xEB9F U+3BC3 # <cjk> [2000] +0xEBA0 U+69E2 # <cjk> [2000] +0xEBA1 U+69E9 # <cjk> [2000] +0xEBA2 U+69EA # <cjk> [2000] +0xEBA3 U+69F5 # <cjk> [2000] +0xEBA4 U+69F6 # <cjk> [2000] +0xEBA5 U+6A0F # <cjk> [2000] +0xEBA6 U+6A15 # <cjk> [2000] +0xEBA7 U+2373F # <cjk> [2000] [Unicode3.1] +0xEBA8 U+6A3B # <cjk> [2000] +0xEBA9 U+6A3E # <cjk> [2000] +0xEBAA U+6A45 # <cjk> [2000] +0xEBAB U+6A50 # <cjk> [2000] +0xEBAC U+6A56 # <cjk> [2000] +0xEBAD U+6A5B # <cjk> [2000] +0xEBAE U+6A6B # <cjk> [2000] +0xEBAF U+6A73 # <cjk> [2000] +0xEBB0 U+23763 # <cjk> [2000] [Unicode3.1] +0xEBB1 U+6A89 # <cjk> [2000] +0xEBB2 U+6A94 # <cjk> [2000] +0xEBB3 U+6A9D # <cjk> [2000] +0xEBB4 U+6A9E # <cjk> [2000] +0xEBB5 U+6AA5 # <cjk> [2000] +0xEBB6 U+6AE4 # <cjk> [2000] +0xEBB7 U+6AE7 # <cjk> [2000] +0xEBB8 U+3C0F # <cjk> [2000] +0xEBB9 U+F91D # CJK COMPATIBILITY IDEOGRAPH-F91D [2000] +0xEBBA U+6B1B # <cjk> [2000] +0xEBBB U+6B1E # <cjk> [2000] +0xEBBC U+6B2C # <cjk> [2000] +0xEBBD U+6B35 # <cjk> [2000] +0xEBBE U+6B46 # <cjk> [2000] +0xEBBF U+6B56 # <cjk> [2000] +0xEBC0 U+6B60 # <cjk> [2000] +0xEBC1 U+6B65 # <cjk> [2000] +0xEBC2 U+6B67 # <cjk> [2000] +0xEBC3 U+6B77 # <cjk> [2000] +0xEBC4 U+6B82 # <cjk> [2000] +0xEBC5 U+6BA9 # <cjk> [2000] +0xEBC6 U+6BAD # <cjk> [2000] +0xEBC7 U+F970 # CJK COMPATIBILITY IDEOGRAPH-F970 [2000] +0xEBC8 U+6BCF # <cjk> [2000] +0xEBC9 U+6BD6 # <cjk> [2000] +0xEBCA U+6BD7 # <cjk> [2000] +0xEBCB U+6BFF # <cjk> [2000] +0xEBCC U+6C05 # <cjk> [2000] +0xEBCD U+6C10 # <cjk> [2000] +0xEBCE U+6C33 # <cjk> [2000] +0xEBCF U+6C59 # <cjk> [2000] +0xEBD0 U+6C5C # <cjk> [2000] +0xEBD1 U+6CAA # <cjk> [2000] +0xEBD2 U+6C74 # <cjk> [2000] +0xEBD3 U+6C76 # <cjk> [2000] +0xEBD4 U+6C85 # <cjk> [2000] +0xEBD5 U+6C86 # <cjk> [2000] +0xEBD6 U+6C98 # <cjk> [2000] +0xEBD7 U+6C9C # <cjk> [2000] +0xEBD8 U+6CFB # <cjk> [2000] +0xEBD9 U+6CC6 # <cjk> [2000] +0xEBDA U+6CD4 # <cjk> [2000] +0xEBDB U+6CE0 # <cjk> [2000] +0xEBDC U+6CEB # <cjk> [2000] +0xEBDD U+6CEE # <cjk> [2000] +0xEBDE U+23CFE # <cjk> [2000] [Unicode3.1] +0xEBDF U+6D04 # <cjk> [2000] +0xEBE0 U+6D0E # <cjk> [2000] +0xEBE1 U+6D2E # <cjk> [2000] +0xEBE2 U+6D31 # <cjk> [2000] +0xEBE3 U+6D39 # <cjk> [2000] +0xEBE4 U+6D3F # <cjk> [2000] +0xEBE5 U+6D58 # <cjk> [2000] +0xEBE6 U+6D65 # <cjk> [2000] +0xEBE7 U+FA45 # CJK COMPATIBILITY IDEOGRAPH-FA45 [2000] [Unicode3.2] +0xEBE8 U+6D82 # <cjk> [2000] +0xEBE9 U+6D87 # <cjk> [2000] +0xEBEA U+6D89 # <cjk> [2000] +0xEBEB U+6D94 # <cjk> [2000] +0xEBEC U+6DAA # <cjk> [2000] +0xEBED U+6DAC # <cjk> [2000] +0xEBEE U+6DBF # <cjk> [2000] +0xEBEF U+6DC4 # <cjk> [2000] +0xEBF0 U+6DD6 # <cjk> [2000] +0xEBF1 U+6DDA # <cjk> [2000] +0xEBF2 U+6DDB # <cjk> [2000] +0xEBF3 U+6DDD # <cjk> [2000] +0xEBF4 U+6DFC # <cjk> [2000] +0xEBF5 U+FA46 # CJK COMPATIBILITY IDEOGRAPH-FA46 [2000] [Unicode3.2] +0xEBF6 U+6E34 # <cjk> [2000] +0xEBF7 U+6E44 # <cjk> [2000] +0xEBF8 U+6E5C # <cjk> [2000] +0xEBF9 U+6E5E # <cjk> [2000] +0xEBFA U+6EAB # <cjk> [2000] +0xEBFB U+6EB1 # <cjk> [2000] +0xEBFC U+6EC1 # <cjk> [2000] +0xEC40 U+6EC7 # <cjk> [2000] +0xEC41 U+6ECE # <cjk> [2000] +0xEC42 U+6F10 # <cjk> [2000] +0xEC43 U+6F1A # <cjk> [2000] +0xEC44 U+FA47 # CJK COMPATIBILITY IDEOGRAPH-FA47 [2000] [Unicode3.2] +0xEC45 U+6F2A # <cjk> [2000] +0xEC46 U+6F2F # <cjk> [2000] +0xEC47 U+6F33 # <cjk> [2000] +0xEC48 U+6F51 # <cjk> [2000] +0xEC49 U+6F59 # <cjk> [2000] +0xEC4A U+6F5E # <cjk> [2000] +0xEC4B U+6F61 # <cjk> [2000] +0xEC4C U+6F62 # <cjk> [2000] +0xEC4D U+6F7E # <cjk> [2000] +0xEC4E U+6F88 # <cjk> [2000] +0xEC4F U+6F8C # <cjk> [2000] +0xEC50 U+6F8D # <cjk> [2000] +0xEC51 U+6F94 # <cjk> [2000] +0xEC52 U+6FA0 # <cjk> [2000] +0xEC53 U+6FA7 # <cjk> [2000] +0xEC54 U+6FB6 # <cjk> [2000] +0xEC55 U+6FBC # <cjk> [2000] +0xEC56 U+6FC7 # <cjk> [2000] +0xEC57 U+6FCA # <cjk> [2000] +0xEC58 U+6FF9 # <cjk> [2000] +0xEC59 U+6FF0 # <cjk> [2000] +0xEC5A U+6FF5 # <cjk> [2000] +0xEC5B U+7005 # <cjk> [2000] +0xEC5C U+7006 # <cjk> [2000] +0xEC5D U+7028 # <cjk> [2000] +0xEC5E U+704A # <cjk> [2000] +0xEC5F U+705D # <cjk> [2000] +0xEC60 U+705E # <cjk> [2000] +0xEC61 U+704E # <cjk> [2000] +0xEC62 U+7064 # <cjk> [2000] +0xEC63 U+7075 # <cjk> [2000] +0xEC64 U+7085 # <cjk> [2000] +0xEC65 U+70A4 # <cjk> [2000] +0xEC66 U+70AB # <cjk> [2000] +0xEC67 U+70B7 # <cjk> [2000] +0xEC68 U+70D4 # <cjk> [2000] +0xEC69 U+70D8 # <cjk> [2000] +0xEC6A U+70E4 # <cjk> [2000] +0xEC6B U+710F # <cjk> [2000] +0xEC6C U+712B # <cjk> [2000] +0xEC6D U+711E # <cjk> [2000] +0xEC6E U+7120 # <cjk> [2000] +0xEC6F U+712E # <cjk> [2000] +0xEC70 U+7130 # <cjk> [2000] +0xEC71 U+7146 # <cjk> [2000] +0xEC72 U+7147 # <cjk> [2000] +0xEC73 U+7151 # <cjk> [2000] +0xEC74 U+FA48 # CJK COMPATIBILITY IDEOGRAPH-FA48 [2000] [Unicode3.2] +0xEC75 U+7152 # <cjk> [2000] +0xEC76 U+715C # <cjk> [2000] +0xEC77 U+7160 # <cjk> [2000] +0xEC78 U+7168 # <cjk> [2000] +0xEC79 U+FA15 # CJK COMPATIBILITY IDEOGRAPH-FA15 [2000] +0xEC7A U+7185 # <cjk> [2000] +0xEC7B U+7187 # <cjk> [2000] +0xEC7C U+7192 # <cjk> [2000] +0xEC7D U+71C1 # <cjk> [2000] +0xEC7E U+71BA # <cjk> [2000] +0xEC80 U+71C4 # <cjk> [2000] +0xEC81 U+71FE # <cjk> [2000] +0xEC82 U+7200 # <cjk> [2000] +0xEC83 U+7215 # <cjk> [2000] +0xEC84 U+7255 # <cjk> [2000] +0xEC85 U+7256 # <cjk> [2000] +0xEC86 U+3E3F # <cjk> [2000] +0xEC87 U+728D # <cjk> [2000] +0xEC88 U+729B # <cjk> [2000] +0xEC89 U+72BE # <cjk> [2000] +0xEC8A U+72C0 # <cjk> [2000] +0xEC8B U+72FB # <cjk> [2000] +0xEC8C U+247F1 # <cjk> [2000] [Unicode3.1] +0xEC8D U+7327 # <cjk> [2000] +0xEC8E U+7328 # <cjk> [2000] +0xEC8F U+FA16 # CJK COMPATIBILITY IDEOGRAPH-FA16 [2000] +0xEC90 U+7350 # <cjk> [2000] +0xEC91 U+7366 # <cjk> [2000] +0xEC92 U+737C # <cjk> [2000] +0xEC93 U+7395 # <cjk> [2000] +0xEC94 U+739F # <cjk> [2000] +0xEC95 U+73A0 # <cjk> [2000] +0xEC96 U+73A2 # <cjk> [2000] +0xEC97 U+73A6 # <cjk> [2000] +0xEC98 U+73AB # <cjk> [2000] +0xEC99 U+73C9 # <cjk> [2000] +0xEC9A U+73CF # <cjk> [2000] +0xEC9B U+73D6 # <cjk> [2000] +0xEC9C U+73D9 # <cjk> [2000] +0xEC9D U+73E3 # <cjk> [2000] +0xEC9E U+73E9 # <cjk> [2000] +0xEC9F U+7407 # <cjk> [2000] +0xECA0 U+740A # <cjk> [2000] +0xECA1 U+741A # <cjk> [2000] +0xECA2 U+741B # <cjk> [2000] +0xECA3 U+FA4A # CJK COMPATIBILITY IDEOGRAPH-FA4A [2000] [Unicode3.2] +0xECA4 U+7426 # <cjk> [2000] +0xECA5 U+7428 # <cjk> [2000] +0xECA6 U+742A # <cjk> [2000] +0xECA7 U+742B # <cjk> [2000] +0xECA8 U+742C # <cjk> [2000] +0xECA9 U+742E # <cjk> [2000] +0xECAA U+742F # <cjk> [2000] +0xECAB U+7430 # <cjk> [2000] +0xECAC U+7444 # <cjk> [2000] +0xECAD U+7446 # <cjk> [2000] +0xECAE U+7447 # <cjk> [2000] +0xECAF U+744B # <cjk> [2000] +0xECB0 U+7457 # <cjk> [2000] +0xECB1 U+7462 # <cjk> [2000] +0xECB2 U+746B # <cjk> [2000] +0xECB3 U+746D # <cjk> [2000] +0xECB4 U+7486 # <cjk> [2000] +0xECB5 U+7487 # <cjk> [2000] +0xECB6 U+7489 # <cjk> [2000] +0xECB7 U+7498 # <cjk> [2000] +0xECB8 U+749C # <cjk> [2000] +0xECB9 U+749F # <cjk> [2000] +0xECBA U+74A3 # <cjk> [2000] +0xECBB U+7490 # <cjk> [2000] +0xECBC U+74A6 # <cjk> [2000] +0xECBD U+74A8 # <cjk> [2000] +0xECBE U+74A9 # <cjk> [2000] +0xECBF U+74B5 # <cjk> [2000] +0xECC0 U+74BF # <cjk> [2000] +0xECC1 U+74C8 # <cjk> [2000] +0xECC2 U+74C9 # <cjk> [2000] +0xECC3 U+74DA # <cjk> [2000] +0xECC4 U+74FF # <cjk> [2000] +0xECC5 U+7501 # <cjk> [2000] +0xECC6 U+7517 # <cjk> [2000] +0xECC7 U+752F # <cjk> [2000] +0xECC8 U+756F # <cjk> [2000] +0xECC9 U+7579 # <cjk> [2000] +0xECCA U+7592 # <cjk> [2000] +0xECCB U+3F72 # <cjk> [2000] +0xECCC U+75CE # <cjk> [2000] +0xECCD U+75E4 # <cjk> [2000] +0xECCE U+7600 # <cjk> [2000] +0xECCF U+7602 # <cjk> [2000] +0xECD0 U+7608 # <cjk> [2000] +0xECD1 U+7615 # <cjk> [2000] +0xECD2 U+7616 # <cjk> [2000] +0xECD3 U+7619 # <cjk> [2000] +0xECD4 U+761E # <cjk> [2000] +0xECD5 U+762D # <cjk> [2000] +0xECD6 U+7635 # <cjk> [2000] +0xECD7 U+7643 # <cjk> [2000] +0xECD8 U+764B # <cjk> [2000] +0xECD9 U+7664 # <cjk> [2000] +0xECDA U+7665 # <cjk> [2000] +0xECDB U+766D # <cjk> [2000] +0xECDC U+766F # <cjk> [2000] +0xECDD U+7671 # <cjk> [2000] +0xECDE U+7681 # <cjk> [2000] +0xECDF U+769B # <cjk> [2000] +0xECE0 U+769D # <cjk> [2000] +0xECE1 U+769E # <cjk> [2000] +0xECE2 U+76A6 # <cjk> [2000] +0xECE3 U+76AA # <cjk> [2000] +0xECE4 U+76B6 # <cjk> [2000] +0xECE5 U+76C5 # <cjk> [2000] +0xECE6 U+76CC # <cjk> [2000] +0xECE7 U+76CE # <cjk> [2000] +0xECE8 U+76D4 # <cjk> [2000] +0xECE9 U+76E6 # <cjk> [2000] +0xECEA U+76F1 # <cjk> [2000] +0xECEB U+76FC # <cjk> [2000] +0xECEC U+770A # <cjk> [2000] +0xECED U+7719 # <cjk> [2000] +0xECEE U+7734 # <cjk> [2000] +0xECEF U+7736 # <cjk> [2000] +0xECF0 U+7746 # <cjk> [2000] +0xECF1 U+774D # <cjk> [2000] +0xECF2 U+774E # <cjk> [2000] +0xECF3 U+775C # <cjk> [2000] +0xECF4 U+775F # <cjk> [2000] +0xECF5 U+7762 # <cjk> [2000] +0xECF6 U+777A # <cjk> [2000] +0xECF7 U+7780 # <cjk> [2000] +0xECF8 U+7794 # <cjk> [2000] +0xECF9 U+77AA # <cjk> [2000] +0xECFA U+77E0 # <cjk> [2000] +0xECFB U+782D # <cjk> [2000] +0xECFC U+2548E # <cjk> [2000] [Unicode3.1] +0xED40 U+7843 # <cjk> [2000] +0xED41 U+784E # <cjk> [2000] +0xED42 U+784F # <cjk> [2000] +0xED43 U+7851 # <cjk> [2000] +0xED44 U+7868 # <cjk> [2000] +0xED45 U+786E # <cjk> [2000] +0xED46 U+FA4B # CJK COMPATIBILITY IDEOGRAPH-FA4B [2000] [Unicode3.2] +0xED47 U+78B0 # <cjk> [2000] +0xED48 U+2550E # <cjk> [2000] [Unicode3.1] +0xED49 U+78AD # <cjk> [2000] +0xED4A U+78E4 # <cjk> [2000] +0xED4B U+78F2 # <cjk> [2000] +0xED4C U+7900 # <cjk> [2000] +0xED4D U+78F7 # <cjk> [2000] +0xED4E U+791C # <cjk> [2000] +0xED4F U+792E # <cjk> [2000] +0xED50 U+7931 # <cjk> [2000] +0xED51 U+7934 # <cjk> [2000] +0xED52 U+FA4C # CJK COMPATIBILITY IDEOGRAPH-FA4C [2000] [Unicode3.2] +0xED53 U+FA4D # CJK COMPATIBILITY IDEOGRAPH-FA4D [2000] [Unicode3.2] +0xED54 U+7945 # <cjk> [2000] +0xED55 U+7946 # <cjk> [2000] +0xED56 U+FA4E # CJK COMPATIBILITY IDEOGRAPH-FA4E [2000] [Unicode3.2] +0xED57 U+FA4F # CJK COMPATIBILITY IDEOGRAPH-FA4F [2000] [Unicode3.2] +0xED58 U+FA50 # CJK COMPATIBILITY IDEOGRAPH-FA50 [2000] [Unicode3.2] +0xED59 U+795C # <cjk> [2000] +0xED5A U+FA51 # CJK COMPATIBILITY IDEOGRAPH-FA51 [2000] [Unicode3.2] +0xED5B U+FA19 # CJK COMPATIBILITY IDEOGRAPH-FA19 [2000] +0xED5C U+FA1A # CJK COMPATIBILITY IDEOGRAPH-FA1A [2000] +0xED5D U+7979 # <cjk> [2000] +0xED5E U+FA52 # CJK COMPATIBILITY IDEOGRAPH-FA52 [2000] [Unicode3.2] +0xED5F U+FA53 # CJK COMPATIBILITY IDEOGRAPH-FA53 [2000] [Unicode3.2] +0xED60 U+FA1B # CJK COMPATIBILITY IDEOGRAPH-FA1B [2000] +0xED61 U+7998 # <cjk> [2000] +0xED62 U+79B1 # <cjk> [2000] +0xED63 U+79B8 # <cjk> [2000] +0xED64 U+79C8 # <cjk> [2000] +0xED65 U+79CA # <cjk> [2000] +0xED66 U+25771 # <cjk> [2000] [Unicode3.1] +0xED67 U+79D4 # <cjk> [2000] +0xED68 U+79DE # <cjk> [2000] +0xED69 U+79EB # <cjk> [2000] +0xED6A U+79ED # <cjk> [2000] +0xED6B U+7A03 # <cjk> [2000] +0xED6C U+FA54 # CJK COMPATIBILITY IDEOGRAPH-FA54 [2000] [Unicode3.2] +0xED6D U+7A39 # <cjk> [2000] +0xED6E U+7A5D # <cjk> [2000] +0xED6F U+7A6D # <cjk> [2000] +0xED70 U+FA55 # CJK COMPATIBILITY IDEOGRAPH-FA55 [2000] [Unicode3.2] +0xED71 U+7A85 # <cjk> [2000] +0xED72 U+7AA0 # <cjk> [2000] +0xED73 U+259C4 # <cjk> [2000] [Unicode3.1] +0xED74 U+7AB3 # <cjk> [2000] +0xED75 U+7ABB # <cjk> [2000] +0xED76 U+7ACE # <cjk> [2000] +0xED77 U+7AEB # <cjk> [2000] +0xED78 U+7AFD # <cjk> [2000] +0xED79 U+7B12 # <cjk> [2000] +0xED7A U+7B2D # <cjk> [2000] +0xED7B U+7B3B # <cjk> [2000] +0xED7C U+7B47 # <cjk> [2000] +0xED7D U+7B4E # <cjk> [2000] +0xED7E U+7B60 # <cjk> [2000] +0xED80 U+7B6D # <cjk> [2000] +0xED81 U+7B6F # <cjk> [2000] +0xED82 U+7B72 # <cjk> [2000] +0xED83 U+7B9E # <cjk> [2000] +0xED84 U+FA56 # CJK COMPATIBILITY IDEOGRAPH-FA56 [2000] [Unicode3.2] +0xED85 U+7BD7 # <cjk> [2000] +0xED86 U+7BD9 # <cjk> [2000] +0xED87 U+7C01 # <cjk> [2000] +0xED88 U+7C31 # <cjk> [2000] +0xED89 U+7C1E # <cjk> [2000] +0xED8A U+7C20 # <cjk> [2000] +0xED8B U+7C33 # <cjk> [2000] +0xED8C U+7C36 # <cjk> [2000] +0xED8D U+4264 # <cjk> [2000] +0xED8E U+25DA1 # <cjk> [2000] [Unicode3.1] +0xED8F U+7C59 # <cjk> [2000] +0xED90 U+7C6D # <cjk> [2000] +0xED91 U+7C79 # <cjk> [2000] +0xED92 U+7C8F # <cjk> [2000] +0xED93 U+7C94 # <cjk> [2000] +0xED94 U+7CA0 # <cjk> [2000] +0xED95 U+7CBC # <cjk> [2000] +0xED96 U+7CD5 # <cjk> [2000] +0xED97 U+7CD9 # <cjk> [2000] +0xED98 U+7CDD # <cjk> [2000] +0xED99 U+7D07 # <cjk> [2000] +0xED9A U+7D08 # <cjk> [2000] +0xED9B U+7D13 # <cjk> [2000] +0xED9C U+7D1D # <cjk> [2000] +0xED9D U+7D23 # <cjk> [2000] +0xED9E U+7D31 # <cjk> [2000] +0xED9F U+7D41 # <cjk> [2000] +0xEDA0 U+7D48 # <cjk> [2000] +0xEDA1 U+7D53 # <cjk> [2000] +0xEDA2 U+7D5C # <cjk> [2000] +0xEDA3 U+7D7A # <cjk> [2000] +0xEDA4 U+7D83 # <cjk> [2000] +0xEDA5 U+7D8B # <cjk> [2000] +0xEDA6 U+7DA0 # <cjk> [2000] +0xEDA7 U+7DA6 # <cjk> [2000] +0xEDA8 U+7DC2 # <cjk> [2000] +0xEDA9 U+7DCC # <cjk> [2000] +0xEDAA U+7DD6 # <cjk> [2000] +0xEDAB U+7DE3 # <cjk> [2000] +0xEDAC U+FA57 # CJK COMPATIBILITY IDEOGRAPH-FA57 [2000] [Unicode3.2] +0xEDAD U+7E28 # <cjk> [2000] +0xEDAE U+7E08 # <cjk> [2000] +0xEDAF U+7E11 # <cjk> [2000] +0xEDB0 U+7E15 # <cjk> [2000] +0xEDB1 U+FA59 # CJK COMPATIBILITY IDEOGRAPH-FA59 [2000] [Unicode3.2] +0xEDB2 U+7E47 # <cjk> [2000] +0xEDB3 U+7E52 # <cjk> [2000] +0xEDB4 U+7E61 # <cjk> [2000] +0xEDB5 U+7E8A # <cjk> [2000] +0xEDB6 U+7E8D # <cjk> [2000] +0xEDB7 U+7F47 # <cjk> [2000] +0xEDB8 U+FA5A # CJK COMPATIBILITY IDEOGRAPH-FA5A [2000] [Unicode3.2] +0xEDB9 U+7F91 # <cjk> [2000] +0xEDBA U+7F97 # <cjk> [2000] +0xEDBB U+7FBF # <cjk> [2000] +0xEDBC U+7FCE # <cjk> [2000] +0xEDBD U+7FDB # <cjk> [2000] +0xEDBE U+7FDF # <cjk> [2000] +0xEDBF U+7FEC # <cjk> [2000] +0xEDC0 U+7FEE # <cjk> [2000] +0xEDC1 U+7FFA # <cjk> [2000] +0xEDC2 U+FA5B # CJK COMPATIBILITY IDEOGRAPH-FA5B [2000] [Unicode3.2] +0xEDC3 U+8014 # <cjk> [2000] +0xEDC4 U+8026 # <cjk> [2000] +0xEDC5 U+8035 # <cjk> [2000] +0xEDC6 U+8037 # <cjk> [2000] +0xEDC7 U+803C # <cjk> [2000] +0xEDC8 U+80CA # <cjk> [2000] +0xEDC9 U+80D7 # <cjk> [2000] +0xEDCA U+80E0 # <cjk> [2000] +0xEDCB U+80F3 # <cjk> [2000] +0xEDCC U+8118 # <cjk> [2000] +0xEDCD U+814A # <cjk> [2000] +0xEDCE U+8160 # <cjk> [2000] +0xEDCF U+8167 # <cjk> [2000] +0xEDD0 U+8168 # <cjk> [2000] +0xEDD1 U+816D # <cjk> [2000] +0xEDD2 U+81BB # <cjk> [2000] +0xEDD3 U+81CA # <cjk> [2000] +0xEDD4 U+81CF # <cjk> [2000] +0xEDD5 U+81D7 # <cjk> [2000] +0xEDD6 U+FA5C # CJK COMPATIBILITY IDEOGRAPH-FA5C [2000] [Unicode3.2] +0xEDD7 U+4453 # <cjk> [2000] +0xEDD8 U+445B # <cjk> [2000] +0xEDD9 U+8260 # <cjk> [2000] +0xEDDA U+8274 # <cjk> [2000] +0xEDDB U+26AFF # <cjk> [2000] [Unicode3.1] +0xEDDC U+828E # <cjk> [2000] +0xEDDD U+82A1 # <cjk> [2000] +0xEDDE U+82A3 # <cjk> [2000] +0xEDDF U+82A4 # <cjk> [2000] +0xEDE0 U+82A9 # <cjk> [2000] +0xEDE1 U+82AE # <cjk> [2000] +0xEDE2 U+82B7 # <cjk> [2000] +0xEDE3 U+82BE # <cjk> [2000] +0xEDE4 U+82BF # <cjk> [2000] +0xEDE5 U+82C6 # <cjk> [2000] +0xEDE6 U+82D5 # <cjk> [2000] +0xEDE7 U+82FD # <cjk> [2000] +0xEDE8 U+82FE # <cjk> [2000] +0xEDE9 U+8300 # <cjk> [2000] +0xEDEA U+8301 # <cjk> [2000] +0xEDEB U+8362 # <cjk> [2000] +0xEDEC U+8322 # <cjk> [2000] +0xEDED U+832D # <cjk> [2000] +0xEDEE U+833A # <cjk> [2000] +0xEDEF U+8343 # <cjk> [2000] +0xEDF0 U+8347 # <cjk> [2000] +0xEDF1 U+8351 # <cjk> [2000] +0xEDF2 U+8355 # <cjk> [2000] +0xEDF3 U+837D # <cjk> [2000] +0xEDF4 U+8386 # <cjk> [2000] +0xEDF5 U+8392 # <cjk> [2000] +0xEDF6 U+8398 # <cjk> [2000] +0xEDF7 U+83A7 # <cjk> [2000] +0xEDF8 U+83A9 # <cjk> [2000] +0xEDF9 U+83BF # <cjk> [2000] +0xEDFA U+83C0 # <cjk> [2000] +0xEDFB U+83C7 # <cjk> [2000] +0xEDFC U+83CF # <cjk> [2000] +0xEE40 U+83D1 # <cjk> [2000] +0xEE41 U+83E1 # <cjk> [2000] +0xEE42 U+83EA # <cjk> [2000] +0xEE43 U+8401 # <cjk> [2000] +0xEE44 U+8406 # <cjk> [2000] +0xEE45 U+840A # <cjk> [2000] +0xEE46 U+FA5F # CJK COMPATIBILITY IDEOGRAPH-FA5F [2000] [Unicode3.2] +0xEE47 U+8448 # <cjk> [2000] +0xEE48 U+845F # <cjk> [2000] +0xEE49 U+8470 # <cjk> [2000] +0xEE4A U+8473 # <cjk> [2000] +0xEE4B U+8485 # <cjk> [2000] +0xEE4C U+849E # <cjk> [2000] +0xEE4D U+84AF # <cjk> [2000] +0xEE4E U+84B4 # <cjk> [2000] +0xEE4F U+84BA # <cjk> [2000] +0xEE50 U+84C0 # <cjk> [2000] +0xEE51 U+84C2 # <cjk> [2000] +0xEE52 U+26E40 # <cjk> [2000] [Unicode3.1] +0xEE53 U+8532 # <cjk> [2000] +0xEE54 U+851E # <cjk> [2000] +0xEE55 U+8523 # <cjk> [2000] +0xEE56 U+852F # <cjk> [2000] +0xEE57 U+8559 # <cjk> [2000] +0xEE58 U+8564 # <cjk> [2000] +0xEE59 U+FA1F # CJK COMPATIBILITY IDEOGRAPH-FA1F [2000] +0xEE5A U+85AD # <cjk> [2000] +0xEE5B U+857A # <cjk> [2000] +0xEE5C U+858C # <cjk> [2000] +0xEE5D U+858F # <cjk> [2000] +0xEE5E U+85A2 # <cjk> [2000] +0xEE5F U+85B0 # <cjk> [2000] +0xEE60 U+85CB # <cjk> [2000] +0xEE61 U+85CE # <cjk> [2000] +0xEE62 U+85ED # <cjk> [2000] +0xEE63 U+8612 # <cjk> [2000] +0xEE64 U+85FF # <cjk> [2000] +0xEE65 U+8604 # <cjk> [2000] +0xEE66 U+8605 # <cjk> [2000] +0xEE67 U+8610 # <cjk> [2000] +0xEE68 U+270F4 # <cjk> [2000] [Unicode3.1] +0xEE69 U+8618 # <cjk> [2000] +0xEE6A U+8629 # <cjk> [2000] +0xEE6B U+8638 # <cjk> [2000] +0xEE6C U+8657 # <cjk> [2000] +0xEE6D U+865B # <cjk> [2000] +0xEE6E U+F936 # CJK COMPATIBILITY IDEOGRAPH-F936 [2000] +0xEE6F U+8662 # <cjk> [2000] +0xEE70 U+459D # <cjk> [2000] +0xEE71 U+866C # <cjk> [2000] +0xEE72 U+8675 # <cjk> [2000] +0xEE73 U+8698 # <cjk> [2000] +0xEE74 U+86B8 # <cjk> [2000] +0xEE75 U+86FA # <cjk> [2000] +0xEE76 U+86FC # <cjk> [2000] +0xEE77 U+86FD # <cjk> [2000] +0xEE78 U+870B # <cjk> [2000] +0xEE79 U+8771 # <cjk> [2000] +0xEE7A U+8787 # <cjk> [2000] +0xEE7B U+8788 # <cjk> [2000] +0xEE7C U+87AC # <cjk> [2000] +0xEE7D U+87AD # <cjk> [2000] +0xEE7E U+87B5 # <cjk> [2000] +0xEE80 U+45EA # <cjk> [2000] +0xEE81 U+87D6 # <cjk> [2000] +0xEE82 U+87EC # <cjk> [2000] +0xEE83 U+8806 # <cjk> [2000] +0xEE84 U+880A # <cjk> [2000] +0xEE85 U+8810 # <cjk> [2000] +0xEE86 U+8814 # <cjk> [2000] +0xEE87 U+881F # <cjk> [2000] +0xEE88 U+8898 # <cjk> [2000] +0xEE89 U+88AA # <cjk> [2000] +0xEE8A U+88CA # <cjk> [2000] +0xEE8B U+88CE # <cjk> [2000] +0xEE8C U+27684 # <cjk> [2000] [Unicode3.1] +0xEE8D U+88F5 # <cjk> [2000] +0xEE8E U+891C # <cjk> [2000] +0xEE8F U+FA60 # CJK COMPATIBILITY IDEOGRAPH-FA60 [2000] [Unicode3.2] +0xEE90 U+8918 # <cjk> [2000] +0xEE91 U+8919 # <cjk> [2000] +0xEE92 U+891A # <cjk> [2000] +0xEE93 U+8927 # <cjk> [2000] +0xEE94 U+8930 # <cjk> [2000] +0xEE95 U+8932 # <cjk> [2000] +0xEE96 U+8939 # <cjk> [2000] +0xEE97 U+8940 # <cjk> [2000] +0xEE98 U+8994 # <cjk> [2000] +0xEE99 U+FA61 # CJK COMPATIBILITY IDEOGRAPH-FA61 [2000] [Unicode3.2] +0xEE9A U+89D4 # <cjk> [2000] +0xEE9B U+89E5 # <cjk> [2000] +0xEE9C U+89F6 # <cjk> [2000] +0xEE9D U+8A12 # <cjk> [2000] +0xEE9E U+8A15 # <cjk> [2000] +0xEE9F U+8A22 # <cjk> [2000] +0xEEA0 U+8A37 # <cjk> [2000] +0xEEA1 U+8A47 # <cjk> [2000] +0xEEA2 U+8A4E # <cjk> [2000] +0xEEA3 U+8A5D # <cjk> [2000] +0xEEA4 U+8A61 # <cjk> [2000] +0xEEA5 U+8A75 # <cjk> [2000] +0xEEA6 U+8A79 # <cjk> [2000] +0xEEA7 U+8AA7 # <cjk> [2000] +0xEEA8 U+8AD0 # <cjk> [2000] +0xEEA9 U+8ADF # <cjk> [2000] +0xEEAA U+8AF4 # <cjk> [2000] +0xEEAB U+8AF6 # <cjk> [2000] +0xEEAC U+FA22 # CJK COMPATIBILITY IDEOGRAPH-FA22 [2000] +0xEEAD U+FA62 # CJK COMPATIBILITY IDEOGRAPH-FA62 [2000] [Unicode3.2] +0xEEAE U+FA63 # CJK COMPATIBILITY IDEOGRAPH-FA63 [2000] [Unicode3.2] +0xEEAF U+8B46 # <cjk> [2000] +0xEEB0 U+8B54 # <cjk> [2000] +0xEEB1 U+8B59 # <cjk> [2000] +0xEEB2 U+8B69 # <cjk> [2000] +0xEEB3 U+8B9D # <cjk> [2000] +0xEEB4 U+8C49 # <cjk> [2000] +0xEEB5 U+8C68 # <cjk> [2000] +0xEEB6 U+FA64 # CJK COMPATIBILITY IDEOGRAPH-FA64 [2000] [Unicode3.2] +0xEEB7 U+8CE1 # <cjk> [2000] +0xEEB8 U+8CF4 # <cjk> [2000] +0xEEB9 U+8CF8 # <cjk> [2000] +0xEEBA U+8CFE # <cjk> [2000] +0xEEBB U+FA65 # CJK COMPATIBILITY IDEOGRAPH-FA65 [2000] [Unicode3.2] +0xEEBC U+8D12 # <cjk> [2000] +0xEEBD U+8D1B # <cjk> [2000] +0xEEBE U+8DAF # <cjk> [2000] +0xEEBF U+8DCE # <cjk> [2000] +0xEEC0 U+8DD1 # <cjk> [2000] +0xEEC1 U+8DD7 # <cjk> [2000] +0xEEC2 U+8E20 # <cjk> [2000] +0xEEC3 U+8E23 # <cjk> [2000] +0xEEC4 U+8E3D # <cjk> [2000] +0xEEC5 U+8E70 # <cjk> [2000] +0xEEC6 U+8E7B # <cjk> [2000] +0xEEC7 U+28277 # <cjk> [2000] [Unicode3.1] +0xEEC8 U+8EC0 # <cjk> [2000] +0xEEC9 U+4844 # <cjk> [2000] +0xEECA U+8EFA # <cjk> [2000] +0xEECB U+8F1E # <cjk> [2000] +0xEECC U+8F2D # <cjk> [2000] +0xEECD U+8F36 # <cjk> [2000] +0xEECE U+8F54 # <cjk> [2000] +0xEECF U+283CD # <cjk> [2000] [Unicode3.1] +0xEED0 U+8FA6 # <cjk> [2000] +0xEED1 U+8FB5 # <cjk> [2000] +0xEED2 U+8FE4 # <cjk> [2000] +0xEED3 U+8FE8 # <cjk> [2000] +0xEED4 U+8FEE # <cjk> [2000] +0xEED5 U+9008 # <cjk> [2000] +0xEED6 U+902D # <cjk> [2000] +0xEED7 U+FA67 # CJK COMPATIBILITY IDEOGRAPH-FA67 [2000] [Unicode3.2] +0xEED8 U+9088 # <cjk> [2000] +0xEED9 U+9095 # <cjk> [2000] +0xEEDA U+9097 # <cjk> [2000] +0xEEDB U+9099 # <cjk> [2000] +0xEEDC U+909B # <cjk> [2000] +0xEEDD U+90A2 # <cjk> [2000] +0xEEDE U+90B3 # <cjk> [2000] +0xEEDF U+90BE # <cjk> [2000] +0xEEE0 U+90C4 # <cjk> [2000] +0xEEE1 U+90C5 # <cjk> [2000] +0xEEE2 U+90C7 # <cjk> [2000] +0xEEE3 U+90D7 # <cjk> [2000] +0xEEE4 U+90DD # <cjk> [2000] +0xEEE5 U+90DE # <cjk> [2000] +0xEEE6 U+90EF # <cjk> [2000] +0xEEE7 U+90F4 # <cjk> [2000] +0xEEE8 U+FA26 # CJK COMPATIBILITY IDEOGRAPH-FA26 [2000] +0xEEE9 U+9114 # <cjk> [2000] +0xEEEA U+9115 # <cjk> [2000] +0xEEEB U+9116 # <cjk> [2000] +0xEEEC U+9122 # <cjk> [2000] +0xEEED U+9123 # <cjk> [2000] +0xEEEE U+9127 # <cjk> [2000] +0xEEEF U+912F # <cjk> [2000] +0xEEF0 U+9131 # <cjk> [2000] +0xEEF1 U+9134 # <cjk> [2000] +0xEEF2 U+913D # <cjk> [2000] +0xEEF3 U+9148 # <cjk> [2000] +0xEEF4 U+915B # <cjk> [2000] +0xEEF5 U+9183 # <cjk> [2000] +0xEEF6 U+919E # <cjk> [2000] +0xEEF7 U+91AC # <cjk> [2000] +0xEEF8 U+91B1 # <cjk> [2000] +0xEEF9 U+91BC # <cjk> [2000] +0xEEFA U+91D7 # <cjk> [2000] +0xEEFB U+91FB # <cjk> [2000] +0xEEFC U+91E4 # <cjk> [2000] +0xEF40 U+91E5 # <cjk> [2000] +0xEF41 U+91ED # <cjk> [2000] +0xEF42 U+91F1 # <cjk> [2000] +0xEF43 U+9207 # <cjk> [2000] +0xEF44 U+9210 # <cjk> [2000] +0xEF45 U+9238 # <cjk> [2000] +0xEF46 U+9239 # <cjk> [2000] +0xEF47 U+923A # <cjk> [2000] +0xEF48 U+923C # <cjk> [2000] +0xEF49 U+9240 # <cjk> [2000] +0xEF4A U+9243 # <cjk> [2000] +0xEF4B U+924F # <cjk> [2000] +0xEF4C U+9278 # <cjk> [2000] +0xEF4D U+9288 # <cjk> [2000] +0xEF4E U+92C2 # <cjk> [2000] +0xEF4F U+92CB # <cjk> [2000] +0xEF50 U+92CC # <cjk> [2000] +0xEF51 U+92D3 # <cjk> [2000] +0xEF52 U+92E0 # <cjk> [2000] +0xEF53 U+92FF # <cjk> [2000] +0xEF54 U+9304 # <cjk> [2000] +0xEF55 U+931F # <cjk> [2000] +0xEF56 U+9321 # <cjk> [2000] +0xEF57 U+9325 # <cjk> [2000] +0xEF58 U+9348 # <cjk> [2000] +0xEF59 U+9349 # <cjk> [2000] +0xEF5A U+934A # <cjk> [2000] +0xEF5B U+9364 # <cjk> [2000] +0xEF5C U+9365 # <cjk> [2000] +0xEF5D U+936A # <cjk> [2000] +0xEF5E U+9370 # <cjk> [2000] +0xEF5F U+939B # <cjk> [2000] +0xEF60 U+93A3 # <cjk> [2000] +0xEF61 U+93BA # <cjk> [2000] +0xEF62 U+93C6 # <cjk> [2000] +0xEF63 U+93DE # <cjk> [2000] +0xEF64 U+93DF # <cjk> [2000] +0xEF65 U+9404 # <cjk> [2000] +0xEF66 U+93FD # <cjk> [2000] +0xEF67 U+9433 # <cjk> [2000] +0xEF68 U+944A # <cjk> [2000] +0xEF69 U+9463 # <cjk> [2000] +0xEF6A U+946B # <cjk> [2000] +0xEF6B U+9471 # <cjk> [2000] +0xEF6C U+9472 # <cjk> [2000] +0xEF6D U+958E # <cjk> [2000] +0xEF6E U+959F # <cjk> [2000] +0xEF6F U+95A6 # <cjk> [2000] +0xEF70 U+95A9 # <cjk> [2000] +0xEF71 U+95AC # <cjk> [2000] +0xEF72 U+95B6 # <cjk> [2000] +0xEF73 U+95BD # <cjk> [2000] +0xEF74 U+95CB # <cjk> [2000] +0xEF75 U+95D0 # <cjk> [2000] +0xEF76 U+95D3 # <cjk> [2000] +0xEF77 U+49B0 # <cjk> [2000] +0xEF78 U+95DA # <cjk> [2000] +0xEF79 U+95DE # <cjk> [2000] +0xEF7A U+9658 # <cjk> [2000] +0xEF7B U+9684 # <cjk> [2000] +0xEF7C U+F9DC # CJK COMPATIBILITY IDEOGRAPH-F9DC [2000] +0xEF7D U+969D # <cjk> [2000] +0xEF7E U+96A4 # <cjk> [2000] +0xEF80 U+96A5 # <cjk> [2000] +0xEF81 U+96D2 # <cjk> [2000] +0xEF82 U+96DE # <cjk> [2000] +0xEF83 U+FA68 # CJK COMPATIBILITY IDEOGRAPH-FA68 [2000] [Unicode3.2] +0xEF84 U+96E9 # <cjk> [2000] +0xEF85 U+96EF # <cjk> [2000] +0xEF86 U+9733 # <cjk> [2000] +0xEF87 U+973B # <cjk> [2000] +0xEF88 U+974D # <cjk> [2000] +0xEF89 U+974E # <cjk> [2000] +0xEF8A U+974F # <cjk> [2000] +0xEF8B U+975A # <cjk> [2000] +0xEF8C U+976E # <cjk> [2000] +0xEF8D U+9773 # <cjk> [2000] +0xEF8E U+9795 # <cjk> [2000] +0xEF8F U+97AE # <cjk> [2000] +0xEF90 U+97BA # <cjk> [2000] +0xEF91 U+97C1 # <cjk> [2000] +0xEF92 U+97C9 # <cjk> [2000] +0xEF93 U+97DE # <cjk> [2000] +0xEF94 U+97DB # <cjk> [2000] +0xEF95 U+97F4 # <cjk> [2000] +0xEF96 U+FA69 # CJK COMPATIBILITY IDEOGRAPH-FA69 [2000] [Unicode3.2] +0xEF97 U+980A # <cjk> [2000] +0xEF98 U+981E # <cjk> [2000] +0xEF99 U+982B # <cjk> [2000] +0xEF9A U+9830 # <cjk> [2000] +0xEF9B U+FA6A # CJK COMPATIBILITY IDEOGRAPH-FA6A [2000] [Unicode3.2] +0xEF9C U+9852 # <cjk> [2000] +0xEF9D U+9853 # <cjk> [2000] +0xEF9E U+9856 # <cjk> [2000] +0xEF9F U+9857 # <cjk> [2000] +0xEFA0 U+9859 # <cjk> [2000] +0xEFA1 U+985A # <cjk> [2000] +0xEFA2 U+F9D0 # CJK COMPATIBILITY IDEOGRAPH-F9D0 [2000] +0xEFA3 U+9865 # <cjk> [2000] +0xEFA4 U+986C # <cjk> [2000] +0xEFA5 U+98BA # <cjk> [2000] +0xEFA6 U+98C8 # <cjk> [2000] +0xEFA7 U+98E7 # <cjk> [2000] +0xEFA8 U+9958 # <cjk> [2000] +0xEFA9 U+999E # <cjk> [2000] +0xEFAA U+9A02 # <cjk> [2000] +0xEFAB U+9A03 # <cjk> [2000] +0xEFAC U+9A24 # <cjk> [2000] +0xEFAD U+9A2D # <cjk> [2000] +0xEFAE U+9A2E # <cjk> [2000] +0xEFAF U+9A38 # <cjk> [2000] +0xEFB0 U+9A4A # <cjk> [2000] +0xEFB1 U+9A4E # <cjk> [2000] +0xEFB2 U+9A52 # <cjk> [2000] +0xEFB3 U+9AB6 # <cjk> [2000] +0xEFB4 U+9AC1 # <cjk> [2000] +0xEFB5 U+9AC3 # <cjk> [2000] +0xEFB6 U+9ACE # <cjk> [2000] +0xEFB7 U+9AD6 # <cjk> [2000] +0xEFB8 U+9AF9 # <cjk> [2000] +0xEFB9 U+9B02 # <cjk> [2000] +0xEFBA U+9B08 # <cjk> [2000] +0xEFBB U+9B20 # <cjk> [2000] +0xEFBC U+4C17 # <cjk> [2000] +0xEFBD U+9B2D # <cjk> [2000] +0xEFBE U+9B5E # <cjk> [2000] +0xEFBF U+9B79 # <cjk> [2000] +0xEFC0 U+9B66 # <cjk> [2000] +0xEFC1 U+9B72 # <cjk> [2000] +0xEFC2 U+9B75 # <cjk> [2000] +0xEFC3 U+9B84 # <cjk> [2000] +0xEFC4 U+9B8A # <cjk> [2000] +0xEFC5 U+9B8F # <cjk> [2000] +0xEFC6 U+9B9E # <cjk> [2000] +0xEFC7 U+9BA7 # <cjk> [2000] +0xEFC8 U+9BC1 # <cjk> [2000] +0xEFC9 U+9BCE # <cjk> [2000] +0xEFCA U+9BE5 # <cjk> [2000] +0xEFCB U+9BF8 # <cjk> [2000] +0xEFCC U+9BFD # <cjk> [2000] +0xEFCD U+9C00 # <cjk> [2000] +0xEFCE U+9C23 # <cjk> [2000] +0xEFCF U+9C41 # <cjk> [2000] +0xEFD0 U+9C4F # <cjk> [2000] +0xEFD1 U+9C50 # <cjk> [2000] +0xEFD2 U+9C53 # <cjk> [2000] +0xEFD3 U+9C63 # <cjk> [2000] +0xEFD4 U+9C65 # <cjk> [2000] +0xEFD5 U+9C77 # <cjk> [2000] +0xEFD6 U+9D1D # <cjk> [2000] +0xEFD7 U+9D1E # <cjk> [2000] +0xEFD8 U+9D43 # <cjk> [2000] +0xEFD9 U+9D47 # <cjk> [2000] +0xEFDA U+9D52 # <cjk> [2000] +0xEFDB U+9D63 # <cjk> [2000] +0xEFDC U+9D70 # <cjk> [2000] +0xEFDD U+9D7C # <cjk> [2000] +0xEFDE U+9D8A # <cjk> [2000] +0xEFDF U+9D96 # <cjk> [2000] +0xEFE0 U+9DC0 # <cjk> [2000] +0xEFE1 U+9DAC # <cjk> [2000] +0xEFE2 U+9DBC # <cjk> [2000] +0xEFE3 U+9DD7 # <cjk> [2000] +0xEFE4 U+2A190 # <cjk> [2000] [Unicode3.1] +0xEFE5 U+9DE7 # <cjk> [2000] +0xEFE6 U+9E07 # <cjk> [2000] +0xEFE7 U+9E15 # <cjk> [2000] +0xEFE8 U+9E7C # <cjk> [2000] +0xEFE9 U+9E9E # <cjk> [2000] +0xEFEA U+9EA4 # <cjk> [2000] +0xEFEB U+9EAC # <cjk> [2000] +0xEFEC U+9EAF # <cjk> [2000] +0xEFED U+9EB4 # <cjk> [2000] +0xEFEE U+9EB5 # <cjk> [2000] +0xEFEF U+9EC3 # <cjk> [2000] +0xEFF0 U+9ED1 # <cjk> [2000] +0xEFF1 U+9F10 # <cjk> [2000] +0xEFF2 U+9F39 # <cjk> [2000] +0xEFF3 U+9F57 # <cjk> [2000] +0xEFF4 U+9F90 # <cjk> [2000] +0xEFF5 U+9F94 # <cjk> [2000] +0xEFF6 U+9F97 # <cjk> [2000] +0xEFF7 U+9FA2 # <cjk> [2000] +0xEFF8 U+59F8 # <cjk> [2004] +0xEFF9 U+5C5B # <cjk> [2004] +0xEFFA U+5E77 # <cjk> [2004] +0xEFFB U+7626 # <cjk> [2004] +0xEFFC U+7E6B # <cjk> [2004] +0xF040 U+20089 # <cjk> [2000] [Unicode3.1] +0xF041 U+4E02 # <cjk> [2000] +0xF042 U+4E0F # <cjk> [2000] +0xF043 U+4E12 # <cjk> [2000] +0xF044 U+4E29 # <cjk> [2000] +0xF045 U+4E2B # <cjk> [2000] +0xF046 U+4E2E # <cjk> [2000] +0xF047 U+4E40 # <cjk> [2000] +0xF048 U+4E47 # <cjk> [2000] +0xF049 U+4E48 # <cjk> [2000] +0xF04A U+200A2 # <cjk> [2000] [Unicode3.1] +0xF04B U+4E51 # <cjk> [2000] +0xF04C U+3406 # <cjk> [2000] +0xF04D U+200A4 # <cjk> [2000] [Unicode3.1] +0xF04E U+4E5A # <cjk> [2000] +0xF04F U+4E69 # <cjk> [2000] +0xF050 U+4E9D # <cjk> [2000] +0xF051 U+342C # <cjk> [2000] +0xF052 U+342E # <cjk> [2000] +0xF053 U+4EB9 # <cjk> [2000] +0xF054 U+4EBB # <cjk> [2000] +0xF055 U+201A2 # <cjk> [2000] [Unicode3.1] +0xF056 U+4EBC # <cjk> [2000] +0xF057 U+4EC3 # <cjk> [2000] +0xF058 U+4EC8 # <cjk> [2000] +0xF059 U+4ED0 # <cjk> [2000] +0xF05A U+4EEB # <cjk> [2000] +0xF05B U+4EDA # <cjk> [2000] +0xF05C U+4EF1 # <cjk> [2000] +0xF05D U+4EF5 # <cjk> [2000] +0xF05E U+4F00 # <cjk> [2000] +0xF05F U+4F16 # <cjk> [2000] +0xF060 U+4F64 # <cjk> [2000] +0xF061 U+4F37 # <cjk> [2000] +0xF062 U+4F3E # <cjk> [2000] +0xF063 U+4F54 # <cjk> [2000] +0xF064 U+4F58 # <cjk> [2000] +0xF065 U+20213 # <cjk> [2000] [Unicode3.1] +0xF066 U+4F77 # <cjk> [2000] +0xF067 U+4F78 # <cjk> [2000] +0xF068 U+4F7A # <cjk> [2000] +0xF069 U+4F7D # <cjk> [2000] +0xF06A U+4F82 # <cjk> [2000] +0xF06B U+4F85 # <cjk> [2000] +0xF06C U+4F92 # <cjk> [2000] +0xF06D U+4F9A # <cjk> [2000] +0xF06E U+4FE6 # <cjk> [2000] +0xF06F U+4FB2 # <cjk> [2000] +0xF070 U+4FBE # <cjk> [2000] +0xF071 U+4FC5 # <cjk> [2000] +0xF072 U+4FCB # <cjk> [2000] +0xF073 U+4FCF # <cjk> [2000] +0xF074 U+4FD2 # <cjk> [2000] +0xF075 U+346A # <cjk> [2000] +0xF076 U+4FF2 # <cjk> [2000] +0xF077 U+5000 # <cjk> [2000] +0xF078 U+5010 # <cjk> [2000] +0xF079 U+5013 # <cjk> [2000] +0xF07A U+501C # <cjk> [2000] +0xF07B U+501E # <cjk> [2000] +0xF07C U+5022 # <cjk> [2000] +0xF07D U+3468 # <cjk> [2000] +0xF07E U+5042 # <cjk> [2000] +0xF080 U+5046 # <cjk> [2000] +0xF081 U+504E # <cjk> [2000] +0xF082 U+5053 # <cjk> [2000] +0xF083 U+5057 # <cjk> [2000] +0xF084 U+5063 # <cjk> [2000] +0xF085 U+5066 # <cjk> [2000] +0xF086 U+506A # <cjk> [2000] +0xF087 U+5070 # <cjk> [2000] +0xF088 U+50A3 # <cjk> [2000] +0xF089 U+5088 # <cjk> [2000] +0xF08A U+5092 # <cjk> [2000] +0xF08B U+5093 # <cjk> [2000] +0xF08C U+5095 # <cjk> [2000] +0xF08D U+5096 # <cjk> [2000] +0xF08E U+509C # <cjk> [2000] +0xF08F U+50AA # <cjk> [2000] +0xF090 U+2032B # <cjk> [2000] [Unicode3.1] +0xF091 U+50B1 # <cjk> [2000] +0xF092 U+50BA # <cjk> [2000] +0xF093 U+50BB # <cjk> [2000] +0xF094 U+50C4 # <cjk> [2000] +0xF095 U+50C7 # <cjk> [2000] +0xF096 U+50F3 # <cjk> [2000] +0xF097 U+20381 # <cjk> [2000] [Unicode3.1] +0xF098 U+50CE # <cjk> [2000] +0xF099 U+20371 # <cjk> [2000] [Unicode3.1] +0xF09A U+50D4 # <cjk> [2000] +0xF09B U+50D9 # <cjk> [2000] +0xF09C U+50E1 # <cjk> [2000] +0xF09D U+50E9 # <cjk> [2000] +0xF09E U+3492 # <cjk> [2000] +0xF140 U+5108 # <cjk> [2000] +0xF141 U+203F9 # <cjk> [2000] [Unicode3.1] +0xF142 U+5117 # <cjk> [2000] +0xF143 U+511B # <cjk> [2000] +0xF144 U+2044A # <cjk> [2000] [Unicode3.1] +0xF145 U+5160 # <cjk> [2000] +0xF146 U+20509 # <cjk> [2000] [Unicode3.1] +0xF147 U+5173 # <cjk> [2000] +0xF148 U+5183 # <cjk> [2000] +0xF149 U+518B # <cjk> [2000] +0xF14A U+34BC # <cjk> [2000] +0xF14B U+5198 # <cjk> [2000] +0xF14C U+51A3 # <cjk> [2000] +0xF14D U+51AD # <cjk> [2000] +0xF14E U+34C7 # <cjk> [2000] +0xF14F U+51BC # <cjk> [2000] +0xF150 U+205D6 # <cjk> [2000] [Unicode3.1] +0xF151 U+20628 # <cjk> [2000] [Unicode3.1] +0xF152 U+51F3 # <cjk> [2000] +0xF153 U+51F4 # <cjk> [2000] +0xF154 U+5202 # <cjk> [2000] +0xF155 U+5212 # <cjk> [2000] +0xF156 U+5216 # <cjk> [2000] +0xF157 U+2074F # <cjk> [2000] [Unicode3.1] +0xF158 U+5255 # <cjk> [2000] +0xF159 U+525C # <cjk> [2000] +0xF15A U+526C # <cjk> [2000] +0xF15B U+5277 # <cjk> [2000] +0xF15C U+5284 # <cjk> [2000] +0xF15D U+5282 # <cjk> [2000] +0xF15E U+20807 # <cjk> [2000] [Unicode3.1] +0xF15F U+5298 # <cjk> [2000] +0xF160 U+2083A # <cjk> [2000] [Unicode3.1] +0xF161 U+52A4 # <cjk> [2000] +0xF162 U+52A6 # <cjk> [2000] +0xF163 U+52AF # <cjk> [2000] +0xF164 U+52BA # <cjk> [2000] +0xF165 U+52BB # <cjk> [2000] +0xF166 U+52CA # <cjk> [2000] +0xF167 U+351F # <cjk> [2000] +0xF168 U+52D1 # <cjk> [2000] +0xF169 U+208B9 # <cjk> [2000] [Unicode3.1] +0xF16A U+52F7 # <cjk> [2000] +0xF16B U+530A # <cjk> [2000] +0xF16C U+530B # <cjk> [2000] +0xF16D U+5324 # <cjk> [2000] +0xF16E U+5335 # <cjk> [2000] +0xF16F U+533E # <cjk> [2000] +0xF170 U+5342 # <cjk> [2000] +0xF171 U+2097C # <cjk> [2000] [Unicode3.1] +0xF172 U+2099D # <cjk> [2000] [Unicode3.1] +0xF173 U+5367 # <cjk> [2000] +0xF174 U+536C # <cjk> [2000] +0xF175 U+537A # <cjk> [2000] +0xF176 U+53A4 # <cjk> [2000] +0xF177 U+53B4 # <cjk> [2000] +0xF178 U+20AD3 # <cjk> [2000] [Unicode3.1] +0xF179 U+53B7 # <cjk> [2000] +0xF17A U+53C0 # <cjk> [2000] +0xF17B U+20B1D # <cjk> [2000] [Unicode3.1] +0xF17C U+355D # <cjk> [2000] +0xF17D U+355E # <cjk> [2000] +0xF17E U+53D5 # <cjk> [2000] +0xF180 U+53DA # <cjk> [2000] +0xF181 U+3563 # <cjk> [2000] +0xF182 U+53F4 # <cjk> [2000] +0xF183 U+53F5 # <cjk> [2000] +0xF184 U+5455 # <cjk> [2000] +0xF185 U+5424 # <cjk> [2000] +0xF186 U+5428 # <cjk> [2000] +0xF187 U+356E # <cjk> [2000] +0xF188 U+5443 # <cjk> [2000] +0xF189 U+5462 # <cjk> [2000] +0xF18A U+5466 # <cjk> [2000] +0xF18B U+546C # <cjk> [2000] +0xF18C U+548A # <cjk> [2000] +0xF18D U+548D # <cjk> [2000] +0xF18E U+5495 # <cjk> [2000] +0xF18F U+54A0 # <cjk> [2000] +0xF190 U+54A6 # <cjk> [2000] +0xF191 U+54AD # <cjk> [2000] +0xF192 U+54AE # <cjk> [2000] +0xF193 U+54B7 # <cjk> [2000] +0xF194 U+54BA # <cjk> [2000] +0xF195 U+54BF # <cjk> [2000] +0xF196 U+54C3 # <cjk> [2000] +0xF197 U+20D45 # <cjk> [2000] [Unicode3.1] +0xF198 U+54EC # <cjk> [2000] +0xF199 U+54EF # <cjk> [2000] +0xF19A U+54F1 # <cjk> [2000] +0xF19B U+54F3 # <cjk> [2000] +0xF19C U+5500 # <cjk> [2000] +0xF19D U+5501 # <cjk> [2000] +0xF19E U+5509 # <cjk> [2000] +0xF19F U+553C # <cjk> [2000] +0xF1A0 U+5541 # <cjk> [2000] +0xF1A1 U+35A6 # <cjk> [2000] +0xF1A2 U+5547 # <cjk> [2000] +0xF1A3 U+554A # <cjk> [2000] +0xF1A4 U+35A8 # <cjk> [2000] +0xF1A5 U+5560 # <cjk> [2000] +0xF1A6 U+5561 # <cjk> [2000] +0xF1A7 U+5564 # <cjk> [2000] +0xF1A8 U+20DE1 # <cjk> [2000] [Unicode3.1] +0xF1A9 U+557D # <cjk> [2000] +0xF1AA U+5582 # <cjk> [2000] +0xF1AB U+5588 # <cjk> [2000] +0xF1AC U+5591 # <cjk> [2000] +0xF1AD U+35C5 # <cjk> [2000] +0xF1AE U+55D2 # <cjk> [2000] +0xF1AF U+20E95 # <cjk> [2000] [Unicode3.1] +0xF1B0 U+20E6D # <cjk> [2000] [Unicode3.1] +0xF1B1 U+55BF # <cjk> [2000] +0xF1B2 U+55C9 # <cjk> [2000] +0xF1B3 U+55CC # <cjk> [2000] +0xF1B4 U+55D1 # <cjk> [2000] +0xF1B5 U+55DD # <cjk> [2000] +0xF1B6 U+35DA # <cjk> [2000] +0xF1B7 U+55E2 # <cjk> [2000] +0xF1B8 U+20E64 # <cjk> [2000] [Unicode3.1] +0xF1B9 U+55E9 # <cjk> [2000] +0xF1BA U+5628 # <cjk> [2000] +0xF1BB U+20F5F # <cjk> [2000] [Unicode3.1] +0xF1BC U+5607 # <cjk> [2000] +0xF1BD U+5610 # <cjk> [2000] +0xF1BE U+5630 # <cjk> [2000] +0xF1BF U+5637 # <cjk> [2000] +0xF1C0 U+35F4 # <cjk> [2000] +0xF1C1 U+563D # <cjk> [2000] +0xF1C2 U+563F # <cjk> [2000] +0xF1C3 U+5640 # <cjk> [2000] +0xF1C4 U+5647 # <cjk> [2000] +0xF1C5 U+565E # <cjk> [2000] +0xF1C6 U+5660 # <cjk> [2000] +0xF1C7 U+566D # <cjk> [2000] +0xF1C8 U+3605 # <cjk> [2000] +0xF1C9 U+5688 # <cjk> [2000] +0xF1CA U+568C # <cjk> [2000] +0xF1CB U+5695 # <cjk> [2000] +0xF1CC U+569A # <cjk> [2000] +0xF1CD U+569D # <cjk> [2000] +0xF1CE U+56A8 # <cjk> [2000] +0xF1CF U+56AD # <cjk> [2000] +0xF1D0 U+56B2 # <cjk> [2000] +0xF1D1 U+56C5 # <cjk> [2000] +0xF1D2 U+56CD # <cjk> [2000] +0xF1D3 U+56DF # <cjk> [2000] +0xF1D4 U+56E8 # <cjk> [2000] +0xF1D5 U+56F6 # <cjk> [2000] +0xF1D6 U+56F7 # <cjk> [2000] +0xF1D7 U+21201 # <cjk> [2000] [Unicode3.1] +0xF1D8 U+5715 # <cjk> [2000] +0xF1D9 U+5723 # <cjk> [2000] +0xF1DA U+21255 # <cjk> [2000] [Unicode3.1] +0xF1DB U+5729 # <cjk> [2000] +0xF1DC U+2127B # <cjk> [2000] [Unicode3.1] +0xF1DD U+5745 # <cjk> [2000] +0xF1DE U+5746 # <cjk> [2000] +0xF1DF U+574C # <cjk> [2000] +0xF1E0 U+574D # <cjk> [2000] +0xF1E1 U+21274 # <cjk> [2000] [Unicode3.1] +0xF1E2 U+5768 # <cjk> [2000] +0xF1E3 U+576F # <cjk> [2000] +0xF1E4 U+5773 # <cjk> [2000] +0xF1E5 U+5774 # <cjk> [2000] +0xF1E6 U+5775 # <cjk> [2000] +0xF1E7 U+577B # <cjk> [2000] +0xF1E8 U+212E4 # <cjk> [2000] [Unicode3.1] +0xF1E9 U+212D7 # <cjk> [2000] [Unicode3.1] +0xF1EA U+57AC # <cjk> [2000] +0xF1EB U+579A # <cjk> [2000] +0xF1EC U+579D # <cjk> [2000] +0xF1ED U+579E # <cjk> [2000] +0xF1EE U+57A8 # <cjk> [2000] +0xF1EF U+57D7 # <cjk> [2000] +0xF1F0 U+212FD # <cjk> [2000] [Unicode3.1] +0xF1F1 U+57CC # <cjk> [2000] +0xF1F2 U+21336 # <cjk> [2000] [Unicode3.1] +0xF1F3 U+21344 # <cjk> [2000] [Unicode3.1] +0xF1F4 U+57DE # <cjk> [2000] +0xF1F5 U+57E6 # <cjk> [2000] +0xF1F6 U+57F0 # <cjk> [2000] +0xF1F7 U+364A # <cjk> [2000] +0xF1F8 U+57F8 # <cjk> [2000] +0xF1F9 U+57FB # <cjk> [2000] +0xF1FA U+57FD # <cjk> [2000] +0xF1FB U+5804 # <cjk> [2000] +0xF1FC U+581E # <cjk> [2000] +0xF240 U+5820 # <cjk> [2000] +0xF241 U+5827 # <cjk> [2000] +0xF242 U+5832 # <cjk> [2000] +0xF243 U+5839 # <cjk> [2000] +0xF244 U+213C4 # <cjk> [2000] [Unicode3.1] +0xF245 U+5849 # <cjk> [2000] +0xF246 U+584C # <cjk> [2000] +0xF247 U+5867 # <cjk> [2000] +0xF248 U+588A # <cjk> [2000] +0xF249 U+588B # <cjk> [2000] +0xF24A U+588D # <cjk> [2000] +0xF24B U+588F # <cjk> [2000] +0xF24C U+5890 # <cjk> [2000] +0xF24D U+5894 # <cjk> [2000] +0xF24E U+589D # <cjk> [2000] +0xF24F U+58AA # <cjk> [2000] +0xF250 U+58B1 # <cjk> [2000] +0xF251 U+2146D # <cjk> [2000] [Unicode3.1] +0xF252 U+58C3 # <cjk> [2000] +0xF253 U+58CD # <cjk> [2000] +0xF254 U+58E2 # <cjk> [2000] +0xF255 U+58F3 # <cjk> [2000] +0xF256 U+58F4 # <cjk> [2000] +0xF257 U+5905 # <cjk> [2000] +0xF258 U+5906 # <cjk> [2000] +0xF259 U+590B # <cjk> [2000] +0xF25A U+590D # <cjk> [2000] +0xF25B U+5914 # <cjk> [2000] +0xF25C U+5924 # <cjk> [2000] +0xF25D U+215D7 # <cjk> [2000] [Unicode3.1] +0xF25E U+3691 # <cjk> [2000] +0xF25F U+593D # <cjk> [2000] +0xF260 U+3699 # <cjk> [2000] +0xF261 U+5946 # <cjk> [2000] +0xF262 U+3696 # <cjk> [2000] +0xF263 U+26C29 # <cjk> [2000] [Unicode3.1] +0xF264 U+595B # <cjk> [2000] +0xF265 U+595F # <cjk> [2000] +0xF266 U+21647 # <cjk> [2000] [Unicode3.1] +0xF267 U+5975 # <cjk> [2000] +0xF268 U+5976 # <cjk> [2000] +0xF269 U+597C # <cjk> [2000] +0xF26A U+599F # <cjk> [2000] +0xF26B U+59AE # <cjk> [2000] +0xF26C U+59BC # <cjk> [2000] +0xF26D U+59C8 # <cjk> [2000] +0xF26E U+59CD # <cjk> [2000] +0xF26F U+59DE # <cjk> [2000] +0xF270 U+59E3 # <cjk> [2000] +0xF271 U+59E4 # <cjk> [2000] +0xF272 U+59E7 # <cjk> [2000] +0xF273 U+59EE # <cjk> [2000] +0xF274 U+21706 # <cjk> [2000] [Unicode3.1] +0xF275 U+21742 # <cjk> [2000] [Unicode3.1] +0xF276 U+36CF # <cjk> [2000] +0xF277 U+5A0C # <cjk> [2000] +0xF278 U+5A0D # <cjk> [2000] +0xF279 U+5A17 # <cjk> [2000] +0xF27A U+5A27 # <cjk> [2000] +0xF27B U+5A2D # <cjk> [2000] +0xF27C U+5A55 # <cjk> [2000] +0xF27D U+5A65 # <cjk> [2000] +0xF27E U+5A7A # <cjk> [2000] +0xF280 U+5A8B # <cjk> [2000] +0xF281 U+5A9C # <cjk> [2000] +0xF282 U+5A9F # <cjk> [2000] +0xF283 U+5AA0 # <cjk> [2000] +0xF284 U+5AA2 # <cjk> [2000] +0xF285 U+5AB1 # <cjk> [2000] +0xF286 U+5AB3 # <cjk> [2000] +0xF287 U+5AB5 # <cjk> [2000] +0xF288 U+5ABA # <cjk> [2000] +0xF289 U+5ABF # <cjk> [2000] +0xF28A U+5ADA # <cjk> [2000] +0xF28B U+5ADC # <cjk> [2000] +0xF28C U+5AE0 # <cjk> [2000] +0xF28D U+5AE5 # <cjk> [2000] +0xF28E U+5AF0 # <cjk> [2000] +0xF28F U+5AEE # <cjk> [2000] +0xF290 U+5AF5 # <cjk> [2000] +0xF291 U+5B00 # <cjk> [2000] +0xF292 U+5B08 # <cjk> [2000] +0xF293 U+5B17 # <cjk> [2000] +0xF294 U+5B34 # <cjk> [2000] +0xF295 U+5B2D # <cjk> [2000] +0xF296 U+5B4C # <cjk> [2000] +0xF297 U+5B52 # <cjk> [2000] +0xF298 U+5B68 # <cjk> [2000] +0xF299 U+5B6F # <cjk> [2000] +0xF29A U+5B7C # <cjk> [2000] +0xF29B U+5B7F # <cjk> [2000] +0xF29C U+5B81 # <cjk> [2000] +0xF29D U+5B84 # <cjk> [2000] +0xF29E U+219C3 # <cjk> [2000] [Unicode3.1] +0xF09F U+5B96 # <cjk> [2000] +0xF0A0 U+5BAC # <cjk> [2000] +0xF0A1 U+3761 # <cjk> [2000] +0xF0A2 U+5BC0 # <cjk> [2000] +0xF0A3 U+3762 # <cjk> [2000] +0xF0A4 U+5BCE # <cjk> [2000] +0xF0A5 U+5BD6 # <cjk> [2000] +0xF0A6 U+376C # <cjk> [2000] +0xF0A7 U+376B # <cjk> [2000] +0xF0A8 U+5BF1 # <cjk> [2000] +0xF0A9 U+5BFD # <cjk> [2000] +0xF0AA U+3775 # <cjk> [2000] +0xF0AB U+5C03 # <cjk> [2000] +0xF0AC U+5C29 # <cjk> [2000] +0xF0AD U+5C30 # <cjk> [2000] +0xF0AE U+21C56 # <cjk> [2000] [Unicode3.1] +0xF0AF U+5C5F # <cjk> [2000] +0xF0B0 U+5C63 # <cjk> [2000] +0xF0B1 U+5C67 # <cjk> [2000] +0xF0B2 U+5C68 # <cjk> [2000] +0xF0B3 U+5C69 # <cjk> [2000] +0xF0B4 U+5C70 # <cjk> [2000] +0xF0B5 U+21D2D # <cjk> [2000] [Unicode3.1] +0xF0B6 U+21D45 # <cjk> [2000] [Unicode3.1] +0xF0B7 U+5C7C # <cjk> [2000] +0xF0B8 U+21D78 # <cjk> [2000] [Unicode3.1] +0xF0B9 U+21D62 # <cjk> [2000] [Unicode3.1] +0xF0BA U+5C88 # <cjk> [2000] +0xF0BB U+5C8A # <cjk> [2000] +0xF0BC U+37C1 # <cjk> [2000] +0xF0BD U+21DA1 # <cjk> [2000] [Unicode3.1] +0xF0BE U+21D9C # <cjk> [2000] [Unicode3.1] +0xF0BF U+5CA0 # <cjk> [2000] +0xF0C0 U+5CA2 # <cjk> [2000] +0xF0C1 U+5CA6 # <cjk> [2000] +0xF0C2 U+5CA7 # <cjk> [2000] +0xF0C3 U+21D92 # <cjk> [2000] [Unicode3.1] +0xF0C4 U+5CAD # <cjk> [2000] +0xF0C5 U+5CB5 # <cjk> [2000] +0xF0C6 U+21DB7 # <cjk> [2000] [Unicode3.1] +0xF0C7 U+5CC9 # <cjk> [2000] +0xF0C8 U+21DE0 # <cjk> [2000] [Unicode3.1] +0xF0C9 U+21E33 # <cjk> [2000] [Unicode3.1] +0xF0CA U+5D06 # <cjk> [2000] +0xF0CB U+5D10 # <cjk> [2000] +0xF0CC U+5D2B # <cjk> [2000] +0xF0CD U+5D1D # <cjk> [2000] +0xF0CE U+5D20 # <cjk> [2000] +0xF0CF U+5D24 # <cjk> [2000] +0xF0D0 U+5D26 # <cjk> [2000] +0xF0D1 U+5D31 # <cjk> [2000] +0xF0D2 U+5D39 # <cjk> [2000] +0xF0D3 U+5D42 # <cjk> [2000] +0xF0D4 U+37E8 # <cjk> [2000] +0xF0D5 U+5D61 # <cjk> [2000] +0xF0D6 U+5D6A # <cjk> [2000] +0xF0D7 U+37F4 # <cjk> [2000] +0xF0D8 U+5D70 # <cjk> [2000] +0xF0D9 U+21F1E # <cjk> [2000] [Unicode3.1] +0xF0DA U+37FD # <cjk> [2000] +0xF0DB U+5D88 # <cjk> [2000] +0xF0DC U+3800 # <cjk> [2000] +0xF0DD U+5D92 # <cjk> [2000] +0xF0DE U+5D94 # <cjk> [2000] +0xF0DF U+5D97 # <cjk> [2000] +0xF0E0 U+5D99 # <cjk> [2000] +0xF0E1 U+5DB0 # <cjk> [2000] +0xF0E2 U+5DB2 # <cjk> [2000] +0xF0E3 U+5DB4 # <cjk> [2000] +0xF0E4 U+21F76 # <cjk> [2000] [Unicode3.1] +0xF0E5 U+5DB9 # <cjk> [2000] +0xF0E6 U+5DD1 # <cjk> [2000] +0xF0E7 U+5DD7 # <cjk> [2000] +0xF0E8 U+5DD8 # <cjk> [2000] +0xF0E9 U+5DE0 # <cjk> [2000] +0xF0EA U+21FFA # <cjk> [2000] [Unicode3.1] +0xF0EB U+5DE4 # <cjk> [2000] +0xF0EC U+5DE9 # <cjk> [2000] +0xF0ED U+382F # <cjk> [2000] +0xF0EE U+5E00 # <cjk> [2000] +0xF0EF U+3836 # <cjk> [2000] +0xF0F0 U+5E12 # <cjk> [2000] +0xF0F1 U+5E15 # <cjk> [2000] +0xF0F2 U+3840 # <cjk> [2000] +0xF0F3 U+5E1F # <cjk> [2000] +0xF0F4 U+5E2E # <cjk> [2000] +0xF0F5 U+5E3E # <cjk> [2000] +0xF0F6 U+5E49 # <cjk> [2000] +0xF0F7 U+385C # <cjk> [2000] +0xF0F8 U+5E56 # <cjk> [2000] +0xF0F9 U+3861 # <cjk> [2000] +0xF0FA U+5E6B # <cjk> [2000] +0xF0FB U+5E6C # <cjk> [2000] +0xF0FC U+5E6D # <cjk> [2000] +0xF29F U+5E6E # <cjk> [2000] +0xF2A0 U+2217B # <cjk> [2000] [Unicode3.1] +0xF2A1 U+5EA5 # <cjk> [2000] +0xF2A2 U+5EAA # <cjk> [2000] +0xF2A3 U+5EAC # <cjk> [2000] +0xF2A4 U+5EB9 # <cjk> [2000] +0xF2A5 U+5EBF # <cjk> [2000] +0xF2A6 U+5EC6 # <cjk> [2000] +0xF2A7 U+5ED2 # <cjk> [2000] +0xF2A8 U+5ED9 # <cjk> [2000] +0xF2A9 U+2231E # <cjk> [2000] [Unicode3.1] +0xF2AA U+5EFD # <cjk> [2000] +0xF2AB U+5F08 # <cjk> [2000] +0xF2AC U+5F0E # <cjk> [2000] +0xF2AD U+5F1C # <cjk> [2000] +0xF2AE U+223AD # <cjk> [2000] [Unicode3.1] +0xF2AF U+5F1E # <cjk> [2000] +0xF2B0 U+5F47 # <cjk> [2000] +0xF2B1 U+5F63 # <cjk> [2000] +0xF2B2 U+5F72 # <cjk> [2000] +0xF2B3 U+5F7E # <cjk> [2000] +0xF2B4 U+5F8F # <cjk> [2000] +0xF2B5 U+5FA2 # <cjk> [2000] +0xF2B6 U+5FA4 # <cjk> [2000] +0xF2B7 U+5FB8 # <cjk> [2000] +0xF2B8 U+5FC4 # <cjk> [2000] +0xF2B9 U+38FA # <cjk> [2000] +0xF2BA U+5FC7 # <cjk> [2000] +0xF2BB U+5FCB # <cjk> [2000] +0xF2BC U+5FD2 # <cjk> [2000] +0xF2BD U+5FD3 # <cjk> [2000] +0xF2BE U+5FD4 # <cjk> [2000] +0xF2BF U+5FE2 # <cjk> [2000] +0xF2C0 U+5FEE # <cjk> [2000] +0xF2C1 U+5FEF # <cjk> [2000] +0xF2C2 U+5FF3 # <cjk> [2000] +0xF2C3 U+5FFC # <cjk> [2000] +0xF2C4 U+3917 # <cjk> [2000] +0xF2C5 U+6017 # <cjk> [2000] +0xF2C6 U+6022 # <cjk> [2000] +0xF2C7 U+6024 # <cjk> [2000] +0xF2C8 U+391A # <cjk> [2000] +0xF2C9 U+604C # <cjk> [2000] +0xF2CA U+607F # <cjk> [2000] +0xF2CB U+608A # <cjk> [2000] +0xF2CC U+6095 # <cjk> [2000] +0xF2CD U+60A8 # <cjk> [2000] +0xF2CE U+226F3 # <cjk> [2000] [Unicode3.1] +0xF2CF U+60B0 # <cjk> [2000] +0xF2D0 U+60B1 # <cjk> [2000] +0xF2D1 U+60BE # <cjk> [2000] +0xF2D2 U+60C8 # <cjk> [2000] +0xF2D3 U+60D9 # <cjk> [2000] +0xF2D4 U+60DB # <cjk> [2000] +0xF2D5 U+60EE # <cjk> [2000] +0xF2D6 U+60F2 # <cjk> [2000] +0xF2D7 U+60F5 # <cjk> [2000] +0xF2D8 U+6110 # <cjk> [2000] +0xF2D9 U+6112 # <cjk> [2000] +0xF2DA U+6113 # <cjk> [2000] +0xF2DB U+6119 # <cjk> [2000] +0xF2DC U+611E # <cjk> [2000] +0xF2DD U+613A # <cjk> [2000] +0xF2DE U+396F # <cjk> [2000] +0xF2DF U+6141 # <cjk> [2000] +0xF2E0 U+6146 # <cjk> [2000] +0xF2E1 U+6160 # <cjk> [2000] +0xF2E2 U+617C # <cjk> [2000] +0xF2E3 U+2285B # <cjk> [2000] [Unicode3.1] +0xF2E4 U+6192 # <cjk> [2000] +0xF2E5 U+6193 # <cjk> [2000] +0xF2E6 U+6197 # <cjk> [2000] +0xF2E7 U+6198 # <cjk> [2000] +0xF2E8 U+61A5 # <cjk> [2000] +0xF2E9 U+61A8 # <cjk> [2000] +0xF2EA U+61AD # <cjk> [2000] +0xF2EB U+228AB # <cjk> [2000] [Unicode3.1] +0xF2EC U+61D5 # <cjk> [2000] +0xF2ED U+61DD # <cjk> [2000] +0xF2EE U+61DF # <cjk> [2000] +0xF2EF U+61F5 # <cjk> [2000] +0xF2F0 U+2298F # <cjk> [2000] [Unicode3.1] +0xF2F1 U+6215 # <cjk> [2000] +0xF2F2 U+6223 # <cjk> [2000] +0xF2F3 U+6229 # <cjk> [2000] +0xF2F4 U+6246 # <cjk> [2000] +0xF2F5 U+624C # <cjk> [2000] +0xF2F6 U+6251 # <cjk> [2000] +0xF2F7 U+6252 # <cjk> [2000] +0xF2F8 U+6261 # <cjk> [2000] +0xF2F9 U+6264 # <cjk> [2000] +0xF2FA U+627B # <cjk> [2000] +0xF2FB U+626D # <cjk> [2000] +0xF2FC U+6273 # <cjk> [2000] +0xF340 U+6299 # <cjk> [2000] +0xF341 U+62A6 # <cjk> [2000] +0xF342 U+62D5 # <cjk> [2000] +0xF343 U+22AB8 # <cjk> [2000] [Unicode3.1] +0xF344 U+62FD # <cjk> [2000] +0xF345 U+6303 # <cjk> [2000] +0xF346 U+630D # <cjk> [2000] +0xF347 U+6310 # <cjk> [2000] +0xF348 U+22B4F # <cjk> [2000] [Unicode3.1] +0xF349 U+22B50 # <cjk> [2000] [Unicode3.1] +0xF34A U+6332 # <cjk> [2000] +0xF34B U+6335 # <cjk> [2000] +0xF34C U+633B # <cjk> [2000] +0xF34D U+633C # <cjk> [2000] +0xF34E U+6341 # <cjk> [2000] +0xF34F U+6344 # <cjk> [2000] +0xF350 U+634E # <cjk> [2000] +0xF351 U+22B46 # <cjk> [2000] [Unicode3.1] +0xF352 U+6359 # <cjk> [2000] +0xF353 U+22C1D # <cjk> [2000] [Unicode3.1] +0xF354 U+22BA6 # <cjk> [2000] [Unicode3.1] +0xF355 U+636C # <cjk> [2000] +0xF356 U+6384 # <cjk> [2000] +0xF357 U+6399 # <cjk> [2000] +0xF358 U+22C24 # <cjk> [2000] [Unicode3.1] +0xF359 U+6394 # <cjk> [2000] +0xF35A U+63BD # <cjk> [2000] +0xF35B U+63F7 # <cjk> [2000] +0xF35C U+63D4 # <cjk> [2000] +0xF35D U+63D5 # <cjk> [2000] +0xF35E U+63DC # <cjk> [2000] +0xF35F U+63E0 # <cjk> [2000] +0xF360 U+63EB # <cjk> [2000] +0xF361 U+63EC # <cjk> [2000] +0xF362 U+63F2 # <cjk> [2000] +0xF363 U+6409 # <cjk> [2000] +0xF364 U+641E # <cjk> [2000] +0xF365 U+6425 # <cjk> [2000] +0xF366 U+6429 # <cjk> [2000] +0xF367 U+642F # <cjk> [2000] +0xF368 U+645A # <cjk> [2000] +0xF369 U+645B # <cjk> [2000] +0xF36A U+645D # <cjk> [2000] +0xF36B U+6473 # <cjk> [2000] +0xF36C U+647D # <cjk> [2000] +0xF36D U+6487 # <cjk> [2000] +0xF36E U+6491 # <cjk> [2000] +0xF36F U+649D # <cjk> [2000] +0xF370 U+649F # <cjk> [2000] +0xF371 U+64CB # <cjk> [2000] +0xF372 U+64CC # <cjk> [2000] +0xF373 U+64D5 # <cjk> [2000] +0xF374 U+64D7 # <cjk> [2000] +0xF375 U+22DE1 # <cjk> [2000] [Unicode3.1] +0xF376 U+64E4 # <cjk> [2000] +0xF377 U+64E5 # <cjk> [2000] +0xF378 U+64FF # <cjk> [2000] +0xF379 U+6504 # <cjk> [2000] +0xF37A U+3A6E # <cjk> [2000] +0xF37B U+650F # <cjk> [2000] +0xF37C U+6514 # <cjk> [2000] +0xF37D U+6516 # <cjk> [2000] +0xF37E U+3A73 # <cjk> [2000] +0xF380 U+651E # <cjk> [2000] +0xF381 U+6532 # <cjk> [2000] +0xF382 U+6544 # <cjk> [2000] +0xF383 U+6554 # <cjk> [2000] +0xF384 U+656B # <cjk> [2000] +0xF385 U+657A # <cjk> [2000] +0xF386 U+6581 # <cjk> [2000] +0xF387 U+6584 # <cjk> [2000] +0xF388 U+6585 # <cjk> [2000] +0xF389 U+658A # <cjk> [2000] +0xF38A U+65B2 # <cjk> [2000] +0xF38B U+65B5 # <cjk> [2000] +0xF38C U+65B8 # <cjk> [2000] +0xF38D U+65BF # <cjk> [2000] +0xF38E U+65C2 # <cjk> [2000] +0xF38F U+65C9 # <cjk> [2000] +0xF390 U+65D4 # <cjk> [2000] +0xF391 U+3AD6 # <cjk> [2000] +0xF392 U+65F2 # <cjk> [2000] +0xF393 U+65F9 # <cjk> [2000] +0xF394 U+65FC # <cjk> [2000] +0xF395 U+6604 # <cjk> [2000] +0xF396 U+6608 # <cjk> [2000] +0xF397 U+6621 # <cjk> [2000] +0xF398 U+662A # <cjk> [2000] +0xF399 U+6645 # <cjk> [2000] +0xF39A U+6651 # <cjk> [2000] +0xF39B U+664E # <cjk> [2000] +0xF39C U+3AEA # <cjk> [2000] +0xF39D U+231C3 # <cjk> [2000] [Unicode3.1] +0xF39E U+6657 # <cjk> [2000] +0xF39F U+665B # <cjk> [2000] +0xF3A0 U+6663 # <cjk> [2000] +0xF3A1 U+231F5 # <cjk> [2000] [Unicode3.1] +0xF3A2 U+231B6 # <cjk> [2000] [Unicode3.1] +0xF3A3 U+666A # <cjk> [2000] +0xF3A4 U+666B # <cjk> [2000] +0xF3A5 U+666C # <cjk> [2000] +0xF3A6 U+666D # <cjk> [2000] +0xF3A7 U+667B # <cjk> [2000] +0xF3A8 U+6680 # <cjk> [2000] +0xF3A9 U+6690 # <cjk> [2000] +0xF3AA U+6692 # <cjk> [2000] +0xF3AB U+6699 # <cjk> [2000] +0xF3AC U+3B0E # <cjk> [2000] +0xF3AD U+66AD # <cjk> [2000] +0xF3AE U+66B1 # <cjk> [2000] +0xF3AF U+66B5 # <cjk> [2000] +0xF3B0 U+3B1A # <cjk> [2000] +0xF3B1 U+66BF # <cjk> [2000] +0xF3B2 U+3B1C # <cjk> [2000] +0xF3B3 U+66EC # <cjk> [2000] +0xF3B4 U+3AD7 # <cjk> [2000] +0xF3B5 U+6701 # <cjk> [2000] +0xF3B6 U+6705 # <cjk> [2000] +0xF3B7 U+6712 # <cjk> [2000] +0xF3B8 U+23372 # <cjk> [2000] [Unicode3.1] +0xF3B9 U+6719 # <cjk> [2000] +0xF3BA U+233D3 # <cjk> [2000] [Unicode3.1] +0xF3BB U+233D2 # <cjk> [2000] [Unicode3.1] +0xF3BC U+674C # <cjk> [2000] +0xF3BD U+674D # <cjk> [2000] +0xF3BE U+6754 # <cjk> [2000] +0xF3BF U+675D # <cjk> [2000] +0xF3C0 U+233D0 # <cjk> [2000] [Unicode3.1] +0xF3C1 U+233E4 # <cjk> [2000] [Unicode3.1] +0xF3C2 U+233D5 # <cjk> [2000] [Unicode3.1] +0xF3C3 U+6774 # <cjk> [2000] +0xF3C4 U+6776 # <cjk> [2000] +0xF3C5 U+233DA # <cjk> [2000] [Unicode3.1] +0xF3C6 U+6792 # <cjk> [2000] +0xF3C7 U+233DF # <cjk> [2000] [Unicode3.1] +0xF3C8 U+8363 # <cjk> [2000] +0xF3C9 U+6810 # <cjk> [2000] +0xF3CA U+67B0 # <cjk> [2000] +0xF3CB U+67B2 # <cjk> [2000] +0xF3CC U+67C3 # <cjk> [2000] +0xF3CD U+67C8 # <cjk> [2000] +0xF3CE U+67D2 # <cjk> [2000] +0xF3CF U+67D9 # <cjk> [2000] +0xF3D0 U+67DB # <cjk> [2000] +0xF3D1 U+67F0 # <cjk> [2000] +0xF3D2 U+67F7 # <cjk> [2000] +0xF3D3 U+2344A # <cjk> [2000] [Unicode3.1] +0xF3D4 U+23451 # <cjk> [2000] [Unicode3.1] +0xF3D5 U+2344B # <cjk> [2000] [Unicode3.1] +0xF3D6 U+6818 # <cjk> [2000] +0xF3D7 U+681F # <cjk> [2000] +0xF3D8 U+682D # <cjk> [2000] +0xF3D9 U+23465 # <cjk> [2000] [Unicode3.1] +0xF3DA U+6833 # <cjk> [2000] +0xF3DB U+683B # <cjk> [2000] +0xF3DC U+683E # <cjk> [2000] +0xF3DD U+6844 # <cjk> [2000] +0xF3DE U+6845 # <cjk> [2000] +0xF3DF U+6849 # <cjk> [2000] +0xF3E0 U+684C # <cjk> [2000] +0xF3E1 U+6855 # <cjk> [2000] +0xF3E2 U+6857 # <cjk> [2000] +0xF3E3 U+3B77 # <cjk> [2000] +0xF3E4 U+686B # <cjk> [2000] +0xF3E5 U+686E # <cjk> [2000] +0xF3E6 U+687A # <cjk> [2000] +0xF3E7 U+687C # <cjk> [2000] +0xF3E8 U+6882 # <cjk> [2000] +0xF3E9 U+6890 # <cjk> [2000] +0xF3EA U+6896 # <cjk> [2000] +0xF3EB U+3B6D # <cjk> [2000] +0xF3EC U+6898 # <cjk> [2000] +0xF3ED U+6899 # <cjk> [2000] +0xF3EE U+689A # <cjk> [2000] +0xF3EF U+689C # <cjk> [2000] +0xF3F0 U+68AA # <cjk> [2000] +0xF3F1 U+68AB # <cjk> [2000] +0xF3F2 U+68B4 # <cjk> [2000] +0xF3F3 U+68BB # <cjk> [2000] +0xF3F4 U+68FB # <cjk> [2000] +0xF3F5 U+234E4 # <cjk> [2000] [Unicode3.1] +0xF3F6 U+2355A # <cjk> [2000] [Unicode3.1] +0xF3F7 U+FA13 # CJK COMPATIBILITY IDEOGRAPH-FA13 [2000] +0xF3F8 U+68C3 # <cjk> [2000] +0xF3F9 U+68C5 # <cjk> [2000] +0xF3FA U+68CC # <cjk> [2000] +0xF3FB U+68CF # <cjk> [2000] +0xF3FC U+68D6 # <cjk> [2000] +0xF440 U+68D9 # <cjk> [2000] +0xF441 U+68E4 # <cjk> [2000] +0xF442 U+68E5 # <cjk> [2000] +0xF443 U+68EC # <cjk> [2000] +0xF444 U+68F7 # <cjk> [2000] +0xF445 U+6903 # <cjk> [2000] +0xF446 U+6907 # <cjk> [2000] +0xF447 U+3B87 # <cjk> [2000] +0xF448 U+3B88 # <cjk> [2000] +0xF449 U+23594 # <cjk> [2000] [Unicode3.1] +0xF44A U+693B # <cjk> [2000] +0xF44B U+3B8D # <cjk> [2000] +0xF44C U+6946 # <cjk> [2000] +0xF44D U+6969 # <cjk> [2000] +0xF44E U+696C # <cjk> [2000] +0xF44F U+6972 # <cjk> [2000] +0xF450 U+697A # <cjk> [2000] +0xF451 U+697F # <cjk> [2000] +0xF452 U+6992 # <cjk> [2000] +0xF453 U+3BA4 # <cjk> [2000] +0xF454 U+6996 # <cjk> [2000] +0xF455 U+6998 # <cjk> [2000] +0xF456 U+69A6 # <cjk> [2000] +0xF457 U+69B0 # <cjk> [2000] +0xF458 U+69B7 # <cjk> [2000] +0xF459 U+69BA # <cjk> [2000] +0xF45A U+69BC # <cjk> [2000] +0xF45B U+69C0 # <cjk> [2000] +0xF45C U+69D1 # <cjk> [2000] +0xF45D U+69D6 # <cjk> [2000] +0xF45E U+23639 # <cjk> [2000] [Unicode3.1] +0xF45F U+23647 # <cjk> [2000] [Unicode3.1] +0xF460 U+6A30 # <cjk> [2000] +0xF461 U+23638 # <cjk> [2000] [Unicode3.1] +0xF462 U+2363A # <cjk> [2000] [Unicode3.1] +0xF463 U+69E3 # <cjk> [2000] +0xF464 U+69EE # <cjk> [2000] +0xF465 U+69EF # <cjk> [2000] +0xF466 U+69F3 # <cjk> [2000] +0xF467 U+3BCD # <cjk> [2000] +0xF468 U+69F4 # <cjk> [2000] +0xF469 U+69FE # <cjk> [2000] +0xF46A U+6A11 # <cjk> [2000] +0xF46B U+6A1A # <cjk> [2000] +0xF46C U+6A1D # <cjk> [2000] +0xF46D U+2371C # <cjk> [2000] [Unicode3.1] +0xF46E U+6A32 # <cjk> [2000] +0xF46F U+6A33 # <cjk> [2000] +0xF470 U+6A34 # <cjk> [2000] +0xF471 U+6A3F # <cjk> [2000] +0xF472 U+6A46 # <cjk> [2000] +0xF473 U+6A49 # <cjk> [2000] +0xF474 U+6A7A # <cjk> [2000] +0xF475 U+6A4E # <cjk> [2000] +0xF476 U+6A52 # <cjk> [2000] +0xF477 U+6A64 # <cjk> [2000] +0xF478 U+2370C # <cjk> [2000] [Unicode3.1] +0xF479 U+6A7E # <cjk> [2000] +0xF47A U+6A83 # <cjk> [2000] +0xF47B U+6A8B # <cjk> [2000] +0xF47C U+3BF0 # <cjk> [2000] +0xF47D U+6A91 # <cjk> [2000] +0xF47E U+6A9F # <cjk> [2000] +0xF480 U+6AA1 # <cjk> [2000] +0xF481 U+23764 # <cjk> [2000] [Unicode3.1] +0xF482 U+6AAB # <cjk> [2000] +0xF483 U+6ABD # <cjk> [2000] +0xF484 U+6AC6 # <cjk> [2000] +0xF485 U+6AD4 # <cjk> [2000] +0xF486 U+6AD0 # <cjk> [2000] +0xF487 U+6ADC # <cjk> [2000] +0xF488 U+6ADD # <cjk> [2000] +0xF489 U+237FF # <cjk> [2000] [Unicode3.1] +0xF48A U+237E7 # <cjk> [2000] [Unicode3.1] +0xF48B U+6AEC # <cjk> [2000] +0xF48C U+6AF1 # <cjk> [2000] +0xF48D U+6AF2 # <cjk> [2000] +0xF48E U+6AF3 # <cjk> [2000] +0xF48F U+6AFD # <cjk> [2000] +0xF490 U+23824 # <cjk> [2000] [Unicode3.1] +0xF491 U+6B0B # <cjk> [2000] +0xF492 U+6B0F # <cjk> [2000] +0xF493 U+6B10 # <cjk> [2000] +0xF494 U+6B11 # <cjk> [2000] +0xF495 U+2383D # <cjk> [2000] [Unicode3.1] +0xF496 U+6B17 # <cjk> [2000] +0xF497 U+3C26 # <cjk> [2000] +0xF498 U+6B2F # <cjk> [2000] +0xF499 U+6B4A # <cjk> [2000] +0xF49A U+6B58 # <cjk> [2000] +0xF49B U+6B6C # <cjk> [2000] +0xF49C U+6B75 # <cjk> [2000] +0xF49D U+6B7A # <cjk> [2000] +0xF49E U+6B81 # <cjk> [2000] +0xF49F U+6B9B # <cjk> [2000] +0xF4A0 U+6BAE # <cjk> [2000] +0xF4A1 U+23A98 # <cjk> [2000] [Unicode3.1] +0xF4A2 U+6BBD # <cjk> [2000] +0xF4A3 U+6BBE # <cjk> [2000] +0xF4A4 U+6BC7 # <cjk> [2000] +0xF4A5 U+6BC8 # <cjk> [2000] +0xF4A6 U+6BC9 # <cjk> [2000] +0xF4A7 U+6BDA # <cjk> [2000] +0xF4A8 U+6BE6 # <cjk> [2000] +0xF4A9 U+6BE7 # <cjk> [2000] +0xF4AA U+6BEE # <cjk> [2000] +0xF4AB U+6BF1 # <cjk> [2000] +0xF4AC U+6C02 # <cjk> [2000] +0xF4AD U+6C0A # <cjk> [2000] +0xF4AE U+6C0E # <cjk> [2000] +0xF4AF U+6C35 # <cjk> [2000] +0xF4B0 U+6C36 # <cjk> [2000] +0xF4B1 U+6C3A # <cjk> [2000] +0xF4B2 U+23C7F # <cjk> [2000] [Unicode3.1] +0xF4B3 U+6C3F # <cjk> [2000] +0xF4B4 U+6C4D # <cjk> [2000] +0xF4B5 U+6C5B # <cjk> [2000] +0xF4B6 U+6C6D # <cjk> [2000] +0xF4B7 U+6C84 # <cjk> [2000] +0xF4B8 U+6C89 # <cjk> [2000] +0xF4B9 U+3CC3 # <cjk> [2000] +0xF4BA U+6C94 # <cjk> [2000] +0xF4BB U+6C95 # <cjk> [2000] +0xF4BC U+6C97 # <cjk> [2000] +0xF4BD U+6CAD # <cjk> [2000] +0xF4BE U+6CC2 # <cjk> [2000] +0xF4BF U+6CD0 # <cjk> [2000] +0xF4C0 U+3CD2 # <cjk> [2000] +0xF4C1 U+6CD6 # <cjk> [2000] +0xF4C2 U+6CDA # <cjk> [2000] +0xF4C3 U+6CDC # <cjk> [2000] +0xF4C4 U+6CE9 # <cjk> [2000] +0xF4C5 U+6CEC # <cjk> [2000] +0xF4C6 U+6CED # <cjk> [2000] +0xF4C7 U+23D00 # <cjk> [2000] [Unicode3.1] +0xF4C8 U+6D00 # <cjk> [2000] +0xF4C9 U+6D0A # <cjk> [2000] +0xF4CA U+6D24 # <cjk> [2000] +0xF4CB U+6D26 # <cjk> [2000] +0xF4CC U+6D27 # <cjk> [2000] +0xF4CD U+6C67 # <cjk> [2000] +0xF4CE U+6D2F # <cjk> [2000] +0xF4CF U+6D3C # <cjk> [2000] +0xF4D0 U+6D5B # <cjk> [2000] +0xF4D1 U+6D5E # <cjk> [2000] +0xF4D2 U+6D60 # <cjk> [2000] +0xF4D3 U+6D70 # <cjk> [2000] +0xF4D4 U+6D80 # <cjk> [2000] +0xF4D5 U+6D81 # <cjk> [2000] +0xF4D6 U+6D8A # <cjk> [2000] +0xF4D7 U+6D8D # <cjk> [2000] +0xF4D8 U+6D91 # <cjk> [2000] +0xF4D9 U+6D98 # <cjk> [2000] +0xF4DA U+23D40 # <cjk> [2000] [Unicode3.1] +0xF4DB U+6E17 # <cjk> [2000] +0xF4DC U+23DFA # <cjk> [2000] [Unicode3.1] +0xF4DD U+23DF9 # <cjk> [2000] [Unicode3.1] +0xF4DE U+23DD3 # <cjk> [2000] [Unicode3.1] +0xF4DF U+6DAB # <cjk> [2000] +0xF4E0 U+6DAE # <cjk> [2000] +0xF4E1 U+6DB4 # <cjk> [2000] +0xF4E2 U+6DC2 # <cjk> [2000] +0xF4E3 U+6D34 # <cjk> [2000] +0xF4E4 U+6DC8 # <cjk> [2000] +0xF4E5 U+6DCE # <cjk> [2000] +0xF4E6 U+6DCF # <cjk> [2000] +0xF4E7 U+6DD0 # <cjk> [2000] +0xF4E8 U+6DDF # <cjk> [2000] +0xF4E9 U+6DE9 # <cjk> [2000] +0xF4EA U+6DF6 # <cjk> [2000] +0xF4EB U+6E36 # <cjk> [2000] +0xF4EC U+6E1E # <cjk> [2000] +0xF4ED U+6E22 # <cjk> [2000] +0xF4EE U+6E27 # <cjk> [2000] +0xF4EF U+3D11 # <cjk> [2000] +0xF4F0 U+6E32 # <cjk> [2000] +0xF4F1 U+6E3C # <cjk> [2000] +0xF4F2 U+6E48 # <cjk> [2000] +0xF4F3 U+6E49 # <cjk> [2000] +0xF4F4 U+6E4B # <cjk> [2000] +0xF4F5 U+6E4C # <cjk> [2000] +0xF4F6 U+6E4F # <cjk> [2000] +0xF4F7 U+6E51 # <cjk> [2000] +0xF4F8 U+6E53 # <cjk> [2000] +0xF4F9 U+6E54 # <cjk> [2000] +0xF4FA U+6E57 # <cjk> [2000] +0xF4FB U+6E63 # <cjk> [2000] +0xF4FC U+3D1E # <cjk> [2000] +0xF540 U+6E93 # <cjk> [2000] +0xF541 U+6EA7 # <cjk> [2000] +0xF542 U+6EB4 # <cjk> [2000] +0xF543 U+6EBF # <cjk> [2000] +0xF544 U+6EC3 # <cjk> [2000] +0xF545 U+6ECA # <cjk> [2000] +0xF546 U+6ED9 # <cjk> [2000] +0xF547 U+6F35 # <cjk> [2000] +0xF548 U+6EEB # <cjk> [2000] +0xF549 U+6EF9 # <cjk> [2000] +0xF54A U+6EFB # <cjk> [2000] +0xF54B U+6F0A # <cjk> [2000] +0xF54C U+6F0C # <cjk> [2000] +0xF54D U+6F18 # <cjk> [2000] +0xF54E U+6F25 # <cjk> [2000] +0xF54F U+6F36 # <cjk> [2000] +0xF550 U+6F3C # <cjk> [2000] +0xF551 U+23F7E # <cjk> [2000] [Unicode3.1] +0xF552 U+6F52 # <cjk> [2000] +0xF553 U+6F57 # <cjk> [2000] +0xF554 U+6F5A # <cjk> [2000] +0xF555 U+6F60 # <cjk> [2000] +0xF556 U+6F68 # <cjk> [2000] +0xF557 U+6F98 # <cjk> [2000] +0xF558 U+6F7D # <cjk> [2000] +0xF559 U+6F90 # <cjk> [2000] +0xF55A U+6F96 # <cjk> [2000] +0xF55B U+6FBE # <cjk> [2000] +0xF55C U+6F9F # <cjk> [2000] +0xF55D U+6FA5 # <cjk> [2000] +0xF55E U+6FAF # <cjk> [2000] +0xF55F U+3D64 # <cjk> [2000] +0xF560 U+6FB5 # <cjk> [2000] +0xF561 U+6FC8 # <cjk> [2000] +0xF562 U+6FC9 # <cjk> [2000] +0xF563 U+6FDA # <cjk> [2000] +0xF564 U+6FDE # <cjk> [2000] +0xF565 U+6FE9 # <cjk> [2000] +0xF566 U+24096 # <cjk> [2000] [Unicode3.1] +0xF567 U+6FFC # <cjk> [2000] +0xF568 U+7000 # <cjk> [2000] +0xF569 U+7007 # <cjk> [2000] +0xF56A U+700A # <cjk> [2000] +0xF56B U+7023 # <cjk> [2000] +0xF56C U+24103 # <cjk> [2000] [Unicode3.1] +0xF56D U+7039 # <cjk> [2000] +0xF56E U+703A # <cjk> [2000] +0xF56F U+703C # <cjk> [2000] +0xF570 U+7043 # <cjk> [2000] +0xF571 U+7047 # <cjk> [2000] +0xF572 U+704B # <cjk> [2000] +0xF573 U+3D9A # <cjk> [2000] +0xF574 U+7054 # <cjk> [2000] +0xF575 U+7065 # <cjk> [2000] +0xF576 U+7069 # <cjk> [2000] +0xF577 U+706C # <cjk> [2000] +0xF578 U+706E # <cjk> [2000] +0xF579 U+7076 # <cjk> [2000] +0xF57A U+707E # <cjk> [2000] +0xF57B U+7081 # <cjk> [2000] +0xF57C U+7086 # <cjk> [2000] +0xF57D U+7095 # <cjk> [2000] +0xF57E U+7097 # <cjk> [2000] +0xF580 U+70BB # <cjk> [2000] +0xF581 U+241C6 # <cjk> [2000] [Unicode3.1] +0xF582 U+709F # <cjk> [2000] +0xF583 U+70B1 # <cjk> [2000] +0xF584 U+241FE # <cjk> [2000] [Unicode3.1] +0xF585 U+70EC # <cjk> [2000] +0xF586 U+70CA # <cjk> [2000] +0xF587 U+70D1 # <cjk> [2000] +0xF588 U+70D3 # <cjk> [2000] +0xF589 U+70DC # <cjk> [2000] +0xF58A U+7103 # <cjk> [2000] +0xF58B U+7104 # <cjk> [2000] +0xF58C U+7106 # <cjk> [2000] +0xF58D U+7107 # <cjk> [2000] +0xF58E U+7108 # <cjk> [2000] +0xF58F U+710C # <cjk> [2000] +0xF590 U+3DC0 # <cjk> [2000] +0xF591 U+712F # <cjk> [2000] +0xF592 U+7131 # <cjk> [2000] +0xF593 U+7150 # <cjk> [2000] +0xF594 U+714A # <cjk> [2000] +0xF595 U+7153 # <cjk> [2000] +0xF596 U+715E # <cjk> [2000] +0xF597 U+3DD4 # <cjk> [2000] +0xF598 U+7196 # <cjk> [2000] +0xF599 U+7180 # <cjk> [2000] +0xF59A U+719B # <cjk> [2000] +0xF59B U+71A0 # <cjk> [2000] +0xF59C U+71A2 # <cjk> [2000] +0xF59D U+71AE # <cjk> [2000] +0xF59E U+71AF # <cjk> [2000] +0xF59F U+71B3 # <cjk> [2000] +0xF5A0 U+243BC # <cjk> [2000] [Unicode3.1] +0xF5A1 U+71CB # <cjk> [2000] +0xF5A2 U+71D3 # <cjk> [2000] +0xF5A3 U+71D9 # <cjk> [2000] +0xF5A4 U+71DC # <cjk> [2000] +0xF5A5 U+7207 # <cjk> [2000] +0xF5A6 U+3E05 # <cjk> [2000] +0xF5A7 U+FA49 # CJK COMPATIBILITY IDEOGRAPH-FA49 [2000] [Unicode3.2] +0xF5A8 U+722B # <cjk> [2000] +0xF5A9 U+7234 # <cjk> [2000] +0xF5AA U+7238 # <cjk> [2000] +0xF5AB U+7239 # <cjk> [2000] +0xF5AC U+4E2C # <cjk> [2000] +0xF5AD U+7242 # <cjk> [2000] +0xF5AE U+7253 # <cjk> [2000] +0xF5AF U+7257 # <cjk> [2000] +0xF5B0 U+7263 # <cjk> [2000] +0xF5B1 U+24629 # <cjk> [2000] [Unicode3.1] +0xF5B2 U+726E # <cjk> [2000] +0xF5B3 U+726F # <cjk> [2000] +0xF5B4 U+7278 # <cjk> [2000] +0xF5B5 U+727F # <cjk> [2000] +0xF5B6 U+728E # <cjk> [2000] +0xF5B7 U+246A5 # <cjk> [2000] [Unicode3.1] +0xF5B8 U+72AD # <cjk> [2000] +0xF5B9 U+72AE # <cjk> [2000] +0xF5BA U+72B0 # <cjk> [2000] +0xF5BB U+72B1 # <cjk> [2000] +0xF5BC U+72C1 # <cjk> [2000] +0xF5BD U+3E60 # <cjk> [2000] +0xF5BE U+72CC # <cjk> [2000] +0xF5BF U+3E66 # <cjk> [2000] +0xF5C0 U+3E68 # <cjk> [2000] +0xF5C1 U+72F3 # <cjk> [2000] +0xF5C2 U+72FA # <cjk> [2000] +0xF5C3 U+7307 # <cjk> [2000] +0xF5C4 U+7312 # <cjk> [2000] +0xF5C5 U+7318 # <cjk> [2000] +0xF5C6 U+7319 # <cjk> [2000] +0xF5C7 U+3E83 # <cjk> [2000] +0xF5C8 U+7339 # <cjk> [2000] +0xF5C9 U+732C # <cjk> [2000] +0xF5CA U+7331 # <cjk> [2000] +0xF5CB U+7333 # <cjk> [2000] +0xF5CC U+733D # <cjk> [2000] +0xF5CD U+7352 # <cjk> [2000] +0xF5CE U+3E94 # <cjk> [2000] +0xF5CF U+736B # <cjk> [2000] +0xF5D0 U+736C # <cjk> [2000] +0xF5D1 U+24896 # <cjk> [2000] [Unicode3.1] +0xF5D2 U+736E # <cjk> [2000] +0xF5D3 U+736F # <cjk> [2000] +0xF5D4 U+7371 # <cjk> [2000] +0xF5D5 U+7377 # <cjk> [2000] +0xF5D6 U+7381 # <cjk> [2000] +0xF5D7 U+7385 # <cjk> [2000] +0xF5D8 U+738A # <cjk> [2000] +0xF5D9 U+7394 # <cjk> [2000] +0xF5DA U+7398 # <cjk> [2000] +0xF5DB U+739C # <cjk> [2000] +0xF5DC U+739E # <cjk> [2000] +0xF5DD U+73A5 # <cjk> [2000] +0xF5DE U+73A8 # <cjk> [2000] +0xF5DF U+73B5 # <cjk> [2000] +0xF5E0 U+73B7 # <cjk> [2000] +0xF5E1 U+73B9 # <cjk> [2000] +0xF5E2 U+73BC # <cjk> [2000] +0xF5E3 U+73BF # <cjk> [2000] +0xF5E4 U+73C5 # <cjk> [2000] +0xF5E5 U+73CB # <cjk> [2000] +0xF5E6 U+73E1 # <cjk> [2000] +0xF5E7 U+73E7 # <cjk> [2000] +0xF5E8 U+73F9 # <cjk> [2000] +0xF5E9 U+7413 # <cjk> [2000] +0xF5EA U+73FA # <cjk> [2000] +0xF5EB U+7401 # <cjk> [2000] +0xF5EC U+7424 # <cjk> [2000] +0xF5ED U+7431 # <cjk> [2000] +0xF5EE U+7439 # <cjk> [2000] +0xF5EF U+7453 # <cjk> [2000] +0xF5F0 U+7440 # <cjk> [2000] +0xF5F1 U+7443 # <cjk> [2000] +0xF5F2 U+744D # <cjk> [2000] +0xF5F3 U+7452 # <cjk> [2000] +0xF5F4 U+745D # <cjk> [2000] +0xF5F5 U+7471 # <cjk> [2000] +0xF5F6 U+7481 # <cjk> [2000] +0xF5F7 U+7485 # <cjk> [2000] +0xF5F8 U+7488 # <cjk> [2000] +0xF5F9 U+24A4D # <cjk> [2000] [Unicode3.1] +0xF5FA U+7492 # <cjk> [2000] +0xF5FB U+7497 # <cjk> [2000] +0xF5FC U+7499 # <cjk> [2000] +0xF640 U+74A0 # <cjk> [2000] +0xF641 U+74A1 # <cjk> [2000] +0xF642 U+74A5 # <cjk> [2000] +0xF643 U+74AA # <cjk> [2000] +0xF644 U+74AB # <cjk> [2000] +0xF645 U+74B9 # <cjk> [2000] +0xF646 U+74BB # <cjk> [2000] +0xF647 U+74BA # <cjk> [2000] +0xF648 U+74D6 # <cjk> [2000] +0xF649 U+74D8 # <cjk> [2000] +0xF64A U+74DE # <cjk> [2000] +0xF64B U+74EF # <cjk> [2000] +0xF64C U+74EB # <cjk> [2000] +0xF64D U+24B56 # <cjk> [2000] [Unicode3.1] +0xF64E U+74FA # <cjk> [2000] +0xF64F U+24B6F # <cjk> [2000] [Unicode3.1] +0xF650 U+7520 # <cjk> [2000] +0xF651 U+7524 # <cjk> [2000] +0xF652 U+752A # <cjk> [2000] +0xF653 U+3F57 # <cjk> [2000] +0xF654 U+24C16 # <cjk> [2000] [Unicode3.1] +0xF655 U+753D # <cjk> [2000] +0xF656 U+753E # <cjk> [2000] +0xF657 U+7540 # <cjk> [2000] +0xF658 U+7548 # <cjk> [2000] +0xF659 U+754E # <cjk> [2000] +0xF65A U+7550 # <cjk> [2000] +0xF65B U+7552 # <cjk> [2000] +0xF65C U+756C # <cjk> [2000] +0xF65D U+7572 # <cjk> [2000] +0xF65E U+7571 # <cjk> [2000] +0xF65F U+757A # <cjk> [2000] +0xF660 U+757D # <cjk> [2000] +0xF661 U+757E # <cjk> [2000] +0xF662 U+7581 # <cjk> [2000] +0xF663 U+24D14 # <cjk> [2000] [Unicode3.1] +0xF664 U+758C # <cjk> [2000] +0xF665 U+3F75 # <cjk> [2000] +0xF666 U+75A2 # <cjk> [2000] +0xF667 U+3F77 # <cjk> [2000] +0xF668 U+75B0 # <cjk> [2000] +0xF669 U+75B7 # <cjk> [2000] +0xF66A U+75BF # <cjk> [2000] +0xF66B U+75C0 # <cjk> [2000] +0xF66C U+75C6 # <cjk> [2000] +0xF66D U+75CF # <cjk> [2000] +0xF66E U+75D3 # <cjk> [2000] +0xF66F U+75DD # <cjk> [2000] +0xF670 U+75DF # <cjk> [2000] +0xF671 U+75E0 # <cjk> [2000] +0xF672 U+75E7 # <cjk> [2000] +0xF673 U+75EC # <cjk> [2000] +0xF674 U+75EE # <cjk> [2000] +0xF675 U+75F1 # <cjk> [2000] +0xF676 U+75F9 # <cjk> [2000] +0xF677 U+7603 # <cjk> [2000] +0xF678 U+7618 # <cjk> [2000] +0xF679 U+7607 # <cjk> [2000] +0xF67A U+760F # <cjk> [2000] +0xF67B U+3FAE # <cjk> [2000] +0xF67C U+24E0E # <cjk> [2000] [Unicode3.1] +0xF67D U+7613 # <cjk> [2000] +0xF67E U+761B # <cjk> [2000] +0xF680 U+761C # <cjk> [2000] +0xF681 U+24E37 # <cjk> [2000] [Unicode3.1] +0xF682 U+7625 # <cjk> [2000] +0xF683 U+7628 # <cjk> [2000] +0xF684 U+763C # <cjk> [2000] +0xF685 U+7633 # <cjk> [2000] +0xF686 U+24E6A # <cjk> [2000] [Unicode3.1] +0xF687 U+3FC9 # <cjk> [2000] +0xF688 U+7641 # <cjk> [2000] +0xF689 U+24E8B # <cjk> [2000] [Unicode3.1] +0xF68A U+7649 # <cjk> [2000] +0xF68B U+7655 # <cjk> [2000] +0xF68C U+3FD7 # <cjk> [2000] +0xF68D U+766E # <cjk> [2000] +0xF68E U+7695 # <cjk> [2000] +0xF68F U+769C # <cjk> [2000] +0xF690 U+76A1 # <cjk> [2000] +0xF691 U+76A0 # <cjk> [2000] +0xF692 U+76A7 # <cjk> [2000] +0xF693 U+76A8 # <cjk> [2000] +0xF694 U+76AF # <cjk> [2000] +0xF695 U+2504A # <cjk> [2000] [Unicode3.1] +0xF696 U+76C9 # <cjk> [2000] +0xF697 U+25055 # <cjk> [2000] [Unicode3.1] +0xF698 U+76E8 # <cjk> [2000] +0xF699 U+76EC # <cjk> [2000] +0xF69A U+25122 # <cjk> [2000] [Unicode3.1] +0xF69B U+7717 # <cjk> [2000] +0xF69C U+771A # <cjk> [2000] +0xF69D U+772D # <cjk> [2000] +0xF69E U+7735 # <cjk> [2000] +0xF69F U+251A9 # <cjk> [2000] [Unicode3.1] +0xF6A0 U+4039 # <cjk> [2000] +0xF6A1 U+251E5 # <cjk> [2000] [Unicode3.1] +0xF6A2 U+251CD # <cjk> [2000] [Unicode3.1] +0xF6A3 U+7758 # <cjk> [2000] +0xF6A4 U+7760 # <cjk> [2000] +0xF6A5 U+776A # <cjk> [2000] +0xF6A6 U+2521E # <cjk> [2000] [Unicode3.1] +0xF6A7 U+7772 # <cjk> [2000] +0xF6A8 U+777C # <cjk> [2000] +0xF6A9 U+777D # <cjk> [2000] +0xF6AA U+2524C # <cjk> [2000] [Unicode3.1] +0xF6AB U+4058 # <cjk> [2000] +0xF6AC U+779A # <cjk> [2000] +0xF6AD U+779F # <cjk> [2000] +0xF6AE U+77A2 # <cjk> [2000] +0xF6AF U+77A4 # <cjk> [2000] +0xF6B0 U+77A9 # <cjk> [2000] +0xF6B1 U+77DE # <cjk> [2000] +0xF6B2 U+77DF # <cjk> [2000] +0xF6B3 U+77E4 # <cjk> [2000] +0xF6B4 U+77E6 # <cjk> [2000] +0xF6B5 U+77EA # <cjk> [2000] +0xF6B6 U+77EC # <cjk> [2000] +0xF6B7 U+4093 # <cjk> [2000] +0xF6B8 U+77F0 # <cjk> [2000] +0xF6B9 U+77F4 # <cjk> [2000] +0xF6BA U+77FB # <cjk> [2000] +0xF6BB U+2542E # <cjk> [2000] [Unicode3.1] +0xF6BC U+7805 # <cjk> [2000] +0xF6BD U+7806 # <cjk> [2000] +0xF6BE U+7809 # <cjk> [2000] +0xF6BF U+780D # <cjk> [2000] +0xF6C0 U+7819 # <cjk> [2000] +0xF6C1 U+7821 # <cjk> [2000] +0xF6C2 U+782C # <cjk> [2000] +0xF6C3 U+7847 # <cjk> [2000] +0xF6C4 U+7864 # <cjk> [2000] +0xF6C5 U+786A # <cjk> [2000] +0xF6C6 U+254D9 # <cjk> [2000] [Unicode3.1] +0xF6C7 U+788A # <cjk> [2000] +0xF6C8 U+7894 # <cjk> [2000] +0xF6C9 U+78A4 # <cjk> [2000] +0xF6CA U+789D # <cjk> [2000] +0xF6CB U+789E # <cjk> [2000] +0xF6CC U+789F # <cjk> [2000] +0xF6CD U+78BB # <cjk> [2000] +0xF6CE U+78C8 # <cjk> [2000] +0xF6CF U+78CC # <cjk> [2000] +0xF6D0 U+78CE # <cjk> [2000] +0xF6D1 U+78D5 # <cjk> [2000] +0xF6D2 U+78E0 # <cjk> [2000] +0xF6D3 U+78E1 # <cjk> [2000] +0xF6D4 U+78E6 # <cjk> [2000] +0xF6D5 U+78F9 # <cjk> [2000] +0xF6D6 U+78FA # <cjk> [2000] +0xF6D7 U+78FB # <cjk> [2000] +0xF6D8 U+78FE # <cjk> [2000] +0xF6D9 U+255A7 # <cjk> [2000] [Unicode3.1] +0xF6DA U+7910 # <cjk> [2000] +0xF6DB U+791B # <cjk> [2000] +0xF6DC U+7930 # <cjk> [2000] +0xF6DD U+7925 # <cjk> [2000] +0xF6DE U+793B # <cjk> [2000] +0xF6DF U+794A # <cjk> [2000] +0xF6E0 U+7958 # <cjk> [2000] +0xF6E1 U+795B # <cjk> [2000] +0xF6E2 U+4105 # <cjk> [2000] +0xF6E3 U+7967 # <cjk> [2000] +0xF6E4 U+7972 # <cjk> [2000] +0xF6E5 U+7994 # <cjk> [2000] +0xF6E6 U+7995 # <cjk> [2000] +0xF6E7 U+7996 # <cjk> [2000] +0xF6E8 U+799B # <cjk> [2000] +0xF6E9 U+79A1 # <cjk> [2000] +0xF6EA U+79A9 # <cjk> [2000] +0xF6EB U+79B4 # <cjk> [2000] +0xF6EC U+79BB # <cjk> [2000] +0xF6ED U+79C2 # <cjk> [2000] +0xF6EE U+79C7 # <cjk> [2000] +0xF6EF U+79CC # <cjk> [2000] +0xF6F0 U+79CD # <cjk> [2000] +0xF6F1 U+79D6 # <cjk> [2000] +0xF6F2 U+4148 # <cjk> [2000] +0xF6F3 U+257A9 # <cjk> [2000] [Unicode3.1] +0xF6F4 U+257B4 # <cjk> [2000] [Unicode3.1] +0xF6F5 U+414F # <cjk> [2000] +0xF6F6 U+7A0A # <cjk> [2000] +0xF6F7 U+7A11 # <cjk> [2000] +0xF6F8 U+7A15 # <cjk> [2000] +0xF6F9 U+7A1B # <cjk> [2000] +0xF6FA U+7A1E # <cjk> [2000] +0xF6FB U+4163 # <cjk> [2000] +0xF6FC U+7A2D # <cjk> [2000] +0xF740 U+7A38 # <cjk> [2000] +0xF741 U+7A47 # <cjk> [2000] +0xF742 U+7A4C # <cjk> [2000] +0xF743 U+7A56 # <cjk> [2000] +0xF744 U+7A59 # <cjk> [2000] +0xF745 U+7A5C # <cjk> [2000] +0xF746 U+7A5F # <cjk> [2000] +0xF747 U+7A60 # <cjk> [2000] +0xF748 U+7A67 # <cjk> [2000] +0xF749 U+7A6A # <cjk> [2000] +0xF74A U+7A75 # <cjk> [2000] +0xF74B U+7A78 # <cjk> [2000] +0xF74C U+7A82 # <cjk> [2000] +0xF74D U+7A8A # <cjk> [2000] +0xF74E U+7A90 # <cjk> [2000] +0xF74F U+7AA3 # <cjk> [2000] +0xF750 U+7AAC # <cjk> [2000] +0xF751 U+259D4 # <cjk> [2000] [Unicode3.1] +0xF752 U+41B4 # <cjk> [2000] +0xF753 U+7AB9 # <cjk> [2000] +0xF754 U+7ABC # <cjk> [2000] +0xF755 U+7ABE # <cjk> [2000] +0xF756 U+41BF # <cjk> [2000] +0xF757 U+7ACC # <cjk> [2000] +0xF758 U+7AD1 # <cjk> [2000] +0xF759 U+7AE7 # <cjk> [2000] +0xF75A U+7AE8 # <cjk> [2000] +0xF75B U+7AF4 # <cjk> [2000] +0xF75C U+25AE4 # <cjk> [2000] [Unicode3.1] +0xF75D U+25AE3 # <cjk> [2000] [Unicode3.1] +0xF75E U+7B07 # <cjk> [2000] +0xF75F U+25AF1 # <cjk> [2000] [Unicode3.1] +0xF760 U+7B3D # <cjk> [2000] +0xF761 U+7B27 # <cjk> [2000] +0xF762 U+7B2A # <cjk> [2000] +0xF763 U+7B2E # <cjk> [2000] +0xF764 U+7B2F # <cjk> [2000] +0xF765 U+7B31 # <cjk> [2000] +0xF766 U+41E6 # <cjk> [2000] +0xF767 U+41F3 # <cjk> [2000] +0xF768 U+7B7F # <cjk> [2000] +0xF769 U+7B41 # <cjk> [2000] +0xF76A U+41EE # <cjk> [2000] +0xF76B U+7B55 # <cjk> [2000] +0xF76C U+7B79 # <cjk> [2000] +0xF76D U+7B64 # <cjk> [2000] +0xF76E U+7B66 # <cjk> [2000] +0xF76F U+7B69 # <cjk> [2000] +0xF770 U+7B73 # <cjk> [2000] +0xF771 U+25BB2 # <cjk> [2000] [Unicode3.1] +0xF772 U+4207 # <cjk> [2000] +0xF773 U+7B90 # <cjk> [2000] +0xF774 U+7B91 # <cjk> [2000] +0xF775 U+7B9B # <cjk> [2000] +0xF776 U+420E # <cjk> [2000] +0xF777 U+7BAF # <cjk> [2000] +0xF778 U+7BB5 # <cjk> [2000] +0xF779 U+7BBC # <cjk> [2000] +0xF77A U+7BC5 # <cjk> [2000] +0xF77B U+7BCA # <cjk> [2000] +0xF77C U+25C4B # <cjk> [2000] [Unicode3.1] +0xF77D U+25C64 # <cjk> [2000] [Unicode3.1] +0xF77E U+7BD4 # <cjk> [2000] +0xF780 U+7BD6 # <cjk> [2000] +0xF781 U+7BDA # <cjk> [2000] +0xF782 U+7BEA # <cjk> [2000] +0xF783 U+7BF0 # <cjk> [2000] +0xF784 U+7C03 # <cjk> [2000] +0xF785 U+7C0B # <cjk> [2000] +0xF786 U+7C0E # <cjk> [2000] +0xF787 U+7C0F # <cjk> [2000] +0xF788 U+7C26 # <cjk> [2000] +0xF789 U+7C45 # <cjk> [2000] +0xF78A U+7C4A # <cjk> [2000] +0xF78B U+7C51 # <cjk> [2000] +0xF78C U+7C57 # <cjk> [2000] +0xF78D U+7C5E # <cjk> [2000] +0xF78E U+7C61 # <cjk> [2000] +0xF78F U+7C69 # <cjk> [2000] +0xF790 U+7C6E # <cjk> [2000] +0xF791 U+7C6F # <cjk> [2000] +0xF792 U+7C70 # <cjk> [2000] +0xF793 U+25E2E # <cjk> [2000] [Unicode3.1] +0xF794 U+25E56 # <cjk> [2000] [Unicode3.1] +0xF795 U+25E65 # <cjk> [2000] [Unicode3.1] +0xF796 U+7CA6 # <cjk> [2000] +0xF797 U+25E62 # <cjk> [2000] [Unicode3.1] +0xF798 U+7CB6 # <cjk> [2000] +0xF799 U+7CB7 # <cjk> [2000] +0xF79A U+7CBF # <cjk> [2000] +0xF79B U+25ED8 # <cjk> [2000] [Unicode3.1] +0xF79C U+7CC4 # <cjk> [2000] +0xF79D U+25EC2 # <cjk> [2000] [Unicode3.1] +0xF79E U+7CC8 # <cjk> [2000] +0xF79F U+7CCD # <cjk> [2000] +0xF7A0 U+25EE8 # <cjk> [2000] [Unicode3.1] +0xF7A1 U+7CD7 # <cjk> [2000] +0xF7A2 U+25F23 # <cjk> [2000] [Unicode3.1] +0xF7A3 U+7CE6 # <cjk> [2000] +0xF7A4 U+7CEB # <cjk> [2000] +0xF7A5 U+25F5C # <cjk> [2000] [Unicode3.1] +0xF7A6 U+7CF5 # <cjk> [2000] +0xF7A7 U+7D03 # <cjk> [2000] +0xF7A8 U+7D09 # <cjk> [2000] +0xF7A9 U+42C6 # <cjk> [2000] +0xF7AA U+7D12 # <cjk> [2000] +0xF7AB U+7D1E # <cjk> [2000] +0xF7AC U+25FE0 # <cjk> [2000] [Unicode3.1] +0xF7AD U+25FD4 # <cjk> [2000] [Unicode3.1] +0xF7AE U+7D3D # <cjk> [2000] +0xF7AF U+7D3E # <cjk> [2000] +0xF7B0 U+7D40 # <cjk> [2000] +0xF7B1 U+7D47 # <cjk> [2000] +0xF7B2 U+2600C # <cjk> [2000] [Unicode3.1] +0xF7B3 U+25FFB # <cjk> [2000] [Unicode3.1] +0xF7B4 U+42D6 # <cjk> [2000] +0xF7B5 U+7D59 # <cjk> [2000] +0xF7B6 U+7D5A # <cjk> [2000] +0xF7B7 U+7D6A # <cjk> [2000] +0xF7B8 U+7D70 # <cjk> [2000] +0xF7B9 U+42DD # <cjk> [2000] +0xF7BA U+7D7F # <cjk> [2000] +0xF7BB U+26017 # <cjk> [2000] [Unicode3.1] +0xF7BC U+7D86 # <cjk> [2000] +0xF7BD U+7D88 # <cjk> [2000] +0xF7BE U+7D8C # <cjk> [2000] +0xF7BF U+7D97 # <cjk> [2000] +0xF7C0 U+26060 # <cjk> [2000] [Unicode3.1] +0xF7C1 U+7D9D # <cjk> [2000] +0xF7C2 U+7DA7 # <cjk> [2000] +0xF7C3 U+7DAA # <cjk> [2000] +0xF7C4 U+7DB6 # <cjk> [2000] +0xF7C5 U+7DB7 # <cjk> [2000] +0xF7C6 U+7DC0 # <cjk> [2000] +0xF7C7 U+7DD7 # <cjk> [2000] +0xF7C8 U+7DD9 # <cjk> [2000] +0xF7C9 U+7DE6 # <cjk> [2000] +0xF7CA U+7DF1 # <cjk> [2000] +0xF7CB U+7DF9 # <cjk> [2000] +0xF7CC U+4302 # <cjk> [2000] +0xF7CD U+260ED # <cjk> [2000] [Unicode3.1] +0xF7CE U+FA58 # CJK COMPATIBILITY IDEOGRAPH-FA58 [2000] [Unicode3.2] +0xF7CF U+7E10 # <cjk> [2000] +0xF7D0 U+7E17 # <cjk> [2000] +0xF7D1 U+7E1D # <cjk> [2000] +0xF7D2 U+7E20 # <cjk> [2000] +0xF7D3 U+7E27 # <cjk> [2000] +0xF7D4 U+7E2C # <cjk> [2000] +0xF7D5 U+7E45 # <cjk> [2000] +0xF7D6 U+7E73 # <cjk> [2000] +0xF7D7 U+7E75 # <cjk> [2000] +0xF7D8 U+7E7E # <cjk> [2000] +0xF7D9 U+7E86 # <cjk> [2000] +0xF7DA U+7E87 # <cjk> [2000] +0xF7DB U+432B # <cjk> [2000] +0xF7DC U+7E91 # <cjk> [2000] +0xF7DD U+7E98 # <cjk> [2000] +0xF7DE U+7E9A # <cjk> [2000] +0xF7DF U+4343 # <cjk> [2000] +0xF7E0 U+7F3C # <cjk> [2000] +0xF7E1 U+7F3B # <cjk> [2000] +0xF7E2 U+7F3E # <cjk> [2000] +0xF7E3 U+7F43 # <cjk> [2000] +0xF7E4 U+7F44 # <cjk> [2000] +0xF7E5 U+7F4F # <cjk> [2000] +0xF7E6 U+34C1 # <cjk> [2000] +0xF7E7 U+26270 # <cjk> [2000] [Unicode3.1] +0xF7E8 U+7F52 # <cjk> [2000] +0xF7E9 U+26286 # <cjk> [2000] [Unicode3.1] +0xF7EA U+7F61 # <cjk> [2000] +0xF7EB U+7F63 # <cjk> [2000] +0xF7EC U+7F64 # <cjk> [2000] +0xF7ED U+7F6D # <cjk> [2000] +0xF7EE U+7F7D # <cjk> [2000] +0xF7EF U+7F7E # <cjk> [2000] +0xF7F0 U+2634C # <cjk> [2000] [Unicode3.1] +0xF7F1 U+7F90 # <cjk> [2000] +0xF7F2 U+517B # <cjk> [2000] +0xF7F3 U+23D0E # <cjk> [2000] [Unicode3.1] +0xF7F4 U+7F96 # <cjk> [2000] +0xF7F5 U+7F9C # <cjk> [2000] +0xF7F6 U+7FAD # <cjk> [2000] +0xF7F7 U+26402 # <cjk> [2000] [Unicode3.1] +0xF7F8 U+7FC3 # <cjk> [2000] +0xF7F9 U+7FCF # <cjk> [2000] +0xF7FA U+7FE3 # <cjk> [2000] +0xF7FB U+7FE5 # <cjk> [2000] +0xF7FC U+7FEF # <cjk> [2000] +0xF840 U+7FF2 # <cjk> [2000] +0xF841 U+8002 # <cjk> [2000] +0xF842 U+800A # <cjk> [2000] +0xF843 U+8008 # <cjk> [2000] +0xF844 U+800E # <cjk> [2000] +0xF845 U+8011 # <cjk> [2000] +0xF846 U+8016 # <cjk> [2000] +0xF847 U+8024 # <cjk> [2000] +0xF848 U+802C # <cjk> [2000] +0xF849 U+8030 # <cjk> [2000] +0xF84A U+8043 # <cjk> [2000] +0xF84B U+8066 # <cjk> [2000] +0xF84C U+8071 # <cjk> [2000] +0xF84D U+8075 # <cjk> [2000] +0xF84E U+807B # <cjk> [2000] +0xF84F U+8099 # <cjk> [2000] +0xF850 U+809C # <cjk> [2000] +0xF851 U+80A4 # <cjk> [2000] +0xF852 U+80A7 # <cjk> [2000] +0xF853 U+80B8 # <cjk> [2000] +0xF854 U+2667E # <cjk> [2000] [Unicode3.1] +0xF855 U+80C5 # <cjk> [2000] +0xF856 U+80D5 # <cjk> [2000] +0xF857 U+80D8 # <cjk> [2000] +0xF858 U+80E6 # <cjk> [2000] +0xF859 U+266B0 # <cjk> [2000] [Unicode3.1] +0xF85A U+810D # <cjk> [2000] +0xF85B U+80F5 # <cjk> [2000] +0xF85C U+80FB # <cjk> [2000] +0xF85D U+43EE # <cjk> [2000] +0xF85E U+8135 # <cjk> [2000] +0xF85F U+8116 # <cjk> [2000] +0xF860 U+811E # <cjk> [2000] +0xF861 U+43F0 # <cjk> [2000] +0xF862 U+8124 # <cjk> [2000] +0xF863 U+8127 # <cjk> [2000] +0xF864 U+812C # <cjk> [2000] +0xF865 U+2671D # <cjk> [2000] [Unicode3.1] +0xF866 U+813D # <cjk> [2000] +0xF867 U+4408 # <cjk> [2000] +0xF868 U+8169 # <cjk> [2000] +0xF869 U+4417 # <cjk> [2000] +0xF86A U+8181 # <cjk> [2000] +0xF86B U+441C # <cjk> [2000] +0xF86C U+8184 # <cjk> [2000] +0xF86D U+8185 # <cjk> [2000] +0xF86E U+4422 # <cjk> [2000] +0xF86F U+8198 # <cjk> [2000] +0xF870 U+81B2 # <cjk> [2000] +0xF871 U+81C1 # <cjk> [2000] +0xF872 U+81C3 # <cjk> [2000] +0xF873 U+81D6 # <cjk> [2000] +0xF874 U+81DB # <cjk> [2000] +0xF875 U+268DD # <cjk> [2000] [Unicode3.1] +0xF876 U+81E4 # <cjk> [2000] +0xF877 U+268EA # <cjk> [2000] [Unicode3.1] +0xF878 U+81EC # <cjk> [2000] +0xF879 U+26951 # <cjk> [2000] [Unicode3.1] +0xF87A U+81FD # <cjk> [2000] +0xF87B U+81FF # <cjk> [2000] +0xF87C U+2696F # <cjk> [2000] [Unicode3.1] +0xF87D U+8204 # <cjk> [2000] +0xF87E U+269DD # <cjk> [2000] [Unicode3.1] +0xF880 U+8219 # <cjk> [2000] +0xF881 U+8221 # <cjk> [2000] +0xF882 U+8222 # <cjk> [2000] +0xF883 U+26A1E # <cjk> [2000] [Unicode3.1] +0xF884 U+8232 # <cjk> [2000] +0xF885 U+8234 # <cjk> [2000] +0xF886 U+823C # <cjk> [2000] +0xF887 U+8246 # <cjk> [2000] +0xF888 U+8249 # <cjk> [2000] +0xF889 U+8245 # <cjk> [2000] +0xF88A U+26A58 # <cjk> [2000] [Unicode3.1] +0xF88B U+824B # <cjk> [2000] +0xF88C U+4476 # <cjk> [2000] +0xF88D U+824F # <cjk> [2000] +0xF88E U+447A # <cjk> [2000] +0xF88F U+8257 # <cjk> [2000] +0xF890 U+26A8C # <cjk> [2000] [Unicode3.1] +0xF891 U+825C # <cjk> [2000] +0xF892 U+8263 # <cjk> [2000] +0xF893 U+26AB7 # <cjk> [2000] [Unicode3.1] +0xF894 U+FA5D # CJK COMPATIBILITY IDEOGRAPH-FA5D [2000] [Unicode3.2] +0xF895 U+FA5E # CJK COMPATIBILITY IDEOGRAPH-FA5E [2000] [Unicode3.2] +0xF896 U+8279 # <cjk> [2000] +0xF897 U+4491 # <cjk> [2000] +0xF898 U+827D # <cjk> [2000] +0xF899 U+827F # <cjk> [2000] +0xF89A U+8283 # <cjk> [2000] +0xF89B U+828A # <cjk> [2000] +0xF89C U+8293 # <cjk> [2000] +0xF89D U+82A7 # <cjk> [2000] +0xF89E U+82A8 # <cjk> [2000] +0xF89F U+82B2 # <cjk> [2000] +0xF8A0 U+82B4 # <cjk> [2000] +0xF8A1 U+82BA # <cjk> [2000] +0xF8A2 U+82BC # <cjk> [2000] +0xF8A3 U+82E2 # <cjk> [2000] +0xF8A4 U+82E8 # <cjk> [2000] +0xF8A5 U+82F7 # <cjk> [2000] +0xF8A6 U+8307 # <cjk> [2000] +0xF8A7 U+8308 # <cjk> [2000] +0xF8A8 U+830C # <cjk> [2000] +0xF8A9 U+8354 # <cjk> [2000] +0xF8AA U+831B # <cjk> [2000] +0xF8AB U+831D # <cjk> [2000] +0xF8AC U+8330 # <cjk> [2000] +0xF8AD U+833C # <cjk> [2000] +0xF8AE U+8344 # <cjk> [2000] +0xF8AF U+8357 # <cjk> [2000] +0xF8B0 U+44BE # <cjk> [2000] +0xF8B1 U+837F # <cjk> [2000] +0xF8B2 U+44D4 # <cjk> [2000] +0xF8B3 U+44B3 # <cjk> [2000] +0xF8B4 U+838D # <cjk> [2000] +0xF8B5 U+8394 # <cjk> [2000] +0xF8B6 U+8395 # <cjk> [2000] +0xF8B7 U+839B # <cjk> [2000] +0xF8B8 U+839D # <cjk> [2000] +0xF8B9 U+83C9 # <cjk> [2000] +0xF8BA U+83D0 # <cjk> [2000] +0xF8BB U+83D4 # <cjk> [2000] +0xF8BC U+83DD # <cjk> [2000] +0xF8BD U+83E5 # <cjk> [2000] +0xF8BE U+83F9 # <cjk> [2000] +0xF8BF U+840F # <cjk> [2000] +0xF8C0 U+8411 # <cjk> [2000] +0xF8C1 U+8415 # <cjk> [2000] +0xF8C2 U+26C73 # <cjk> [2000] [Unicode3.1] +0xF8C3 U+8417 # <cjk> [2000] +0xF8C4 U+8439 # <cjk> [2000] +0xF8C5 U+844A # <cjk> [2000] +0xF8C6 U+844F # <cjk> [2000] +0xF8C7 U+8451 # <cjk> [2000] +0xF8C8 U+8452 # <cjk> [2000] +0xF8C9 U+8459 # <cjk> [2000] +0xF8CA U+845A # <cjk> [2000] +0xF8CB U+845C # <cjk> [2000] +0xF8CC U+26CDD # <cjk> [2000] [Unicode3.1] +0xF8CD U+8465 # <cjk> [2000] +0xF8CE U+8476 # <cjk> [2000] +0xF8CF U+8478 # <cjk> [2000] +0xF8D0 U+847C # <cjk> [2000] +0xF8D1 U+8481 # <cjk> [2000] +0xF8D2 U+450D # <cjk> [2000] +0xF8D3 U+84DC # <cjk> [2000] +0xF8D4 U+8497 # <cjk> [2000] +0xF8D5 U+84A6 # <cjk> [2000] +0xF8D6 U+84BE # <cjk> [2000] +0xF8D7 U+4508 # <cjk> [2000] +0xF8D8 U+84CE # <cjk> [2000] +0xF8D9 U+84CF # <cjk> [2000] +0xF8DA U+84D3 # <cjk> [2000] +0xF8DB U+26E65 # <cjk> [2000] [Unicode3.1] +0xF8DC U+84E7 # <cjk> [2000] +0xF8DD U+84EA # <cjk> [2000] +0xF8DE U+84EF # <cjk> [2000] +0xF8DF U+84F0 # <cjk> [2000] +0xF8E0 U+84F1 # <cjk> [2000] +0xF8E1 U+84FA # <cjk> [2000] +0xF8E2 U+84FD # <cjk> [2000] +0xF8E3 U+850C # <cjk> [2000] +0xF8E4 U+851B # <cjk> [2000] +0xF8E5 U+8524 # <cjk> [2000] +0xF8E6 U+8525 # <cjk> [2000] +0xF8E7 U+852B # <cjk> [2000] +0xF8E8 U+8534 # <cjk> [2000] +0xF8E9 U+854F # <cjk> [2000] +0xF8EA U+856F # <cjk> [2000] +0xF8EB U+4525 # <cjk> [2000] +0xF8EC U+4543 # <cjk> [2000] +0xF8ED U+853E # <cjk> [2000] +0xF8EE U+8551 # <cjk> [2000] +0xF8EF U+8553 # <cjk> [2000] +0xF8F0 U+855E # <cjk> [2000] +0xF8F1 U+8561 # <cjk> [2000] +0xF8F2 U+8562 # <cjk> [2000] +0xF8F3 U+26F94 # <cjk> [2000] [Unicode3.1] +0xF8F4 U+857B # <cjk> [2000] +0xF8F5 U+857D # <cjk> [2000] +0xF8F6 U+857F # <cjk> [2000] +0xF8F7 U+8581 # <cjk> [2000] +0xF8F8 U+8586 # <cjk> [2000] +0xF8F9 U+8593 # <cjk> [2000] +0xF8FA U+859D # <cjk> [2000] +0xF8FB U+859F # <cjk> [2000] +0xF8FC U+26FF8 # <cjk> [2000] [Unicode3.1] +0xF940 U+26FF6 # <cjk> [2000] [Unicode3.1] +0xF941 U+26FF7 # <cjk> [2000] [Unicode3.1] +0xF942 U+85B7 # <cjk> [2000] +0xF943 U+85BC # <cjk> [2000] +0xF944 U+85C7 # <cjk> [2000] +0xF945 U+85CA # <cjk> [2000] +0xF946 U+85D8 # <cjk> [2000] +0xF947 U+85D9 # <cjk> [2000] +0xF948 U+85DF # <cjk> [2000] +0xF949 U+85E1 # <cjk> [2000] +0xF94A U+85E6 # <cjk> [2000] +0xF94B U+85F6 # <cjk> [2000] +0xF94C U+8600 # <cjk> [2000] +0xF94D U+8611 # <cjk> [2000] +0xF94E U+861E # <cjk> [2000] +0xF94F U+8621 # <cjk> [2000] +0xF950 U+8624 # <cjk> [2000] +0xF951 U+8627 # <cjk> [2000] +0xF952 U+2710D # <cjk> [2000] [Unicode3.1] +0xF953 U+8639 # <cjk> [2000] +0xF954 U+863C # <cjk> [2000] +0xF955 U+27139 # <cjk> [2000] [Unicode3.1] +0xF956 U+8640 # <cjk> [2000] +0xF957 U+FA20 # CJK COMPATIBILITY IDEOGRAPH-FA20 [2000] +0xF958 U+8653 # <cjk> [2000] +0xF959 U+8656 # <cjk> [2000] +0xF95A U+866F # <cjk> [2000] +0xF95B U+8677 # <cjk> [2000] +0xF95C U+867A # <cjk> [2000] +0xF95D U+8687 # <cjk> [2000] +0xF95E U+8689 # <cjk> [2000] +0xF95F U+868D # <cjk> [2000] +0xF960 U+8691 # <cjk> [2000] +0xF961 U+869C # <cjk> [2000] +0xF962 U+869D # <cjk> [2000] +0xF963 U+86A8 # <cjk> [2000] +0xF964 U+FA21 # CJK COMPATIBILITY IDEOGRAPH-FA21 [2000] +0xF965 U+86B1 # <cjk> [2000] +0xF966 U+86B3 # <cjk> [2000] +0xF967 U+86C1 # <cjk> [2000] +0xF968 U+86C3 # <cjk> [2000] +0xF969 U+86D1 # <cjk> [2000] +0xF96A U+86D5 # <cjk> [2000] +0xF96B U+86D7 # <cjk> [2000] +0xF96C U+86E3 # <cjk> [2000] +0xF96D U+86E6 # <cjk> [2000] +0xF96E U+45B8 # <cjk> [2000] +0xF96F U+8705 # <cjk> [2000] +0xF970 U+8707 # <cjk> [2000] +0xF971 U+870E # <cjk> [2000] +0xF972 U+8710 # <cjk> [2000] +0xF973 U+8713 # <cjk> [2000] +0xF974 U+8719 # <cjk> [2000] +0xF975 U+871F # <cjk> [2000] +0xF976 U+8721 # <cjk> [2000] +0xF977 U+8723 # <cjk> [2000] +0xF978 U+8731 # <cjk> [2000] +0xF979 U+873A # <cjk> [2000] +0xF97A U+873E # <cjk> [2000] +0xF97B U+8740 # <cjk> [2000] +0xF97C U+8743 # <cjk> [2000] +0xF97D U+8751 # <cjk> [2000] +0xF97E U+8758 # <cjk> [2000] +0xF980 U+8764 # <cjk> [2000] +0xF981 U+8765 # <cjk> [2000] +0xF982 U+8772 # <cjk> [2000] +0xF983 U+877C # <cjk> [2000] +0xF984 U+273DB # <cjk> [2000] [Unicode3.1] +0xF985 U+273DA # <cjk> [2000] [Unicode3.1] +0xF986 U+87A7 # <cjk> [2000] +0xF987 U+8789 # <cjk> [2000] +0xF988 U+878B # <cjk> [2000] +0xF989 U+8793 # <cjk> [2000] +0xF98A U+87A0 # <cjk> [2000] +0xF98B U+273FE # <cjk> [2000] [Unicode3.1] +0xF98C U+45E5 # <cjk> [2000] +0xF98D U+87BE # <cjk> [2000] +0xF98E U+27410 # <cjk> [2000] [Unicode3.1] +0xF98F U+87C1 # <cjk> [2000] +0xF990 U+87CE # <cjk> [2000] +0xF991 U+87F5 # <cjk> [2000] +0xF992 U+87DF # <cjk> [2000] +0xF993 U+27449 # <cjk> [2000] [Unicode3.1] +0xF994 U+87E3 # <cjk> [2000] +0xF995 U+87E5 # <cjk> [2000] +0xF996 U+87E6 # <cjk> [2000] +0xF997 U+87EA # <cjk> [2000] +0xF998 U+87EB # <cjk> [2000] +0xF999 U+87ED # <cjk> [2000] +0xF99A U+8801 # <cjk> [2000] +0xF99B U+8803 # <cjk> [2000] +0xF99C U+880B # <cjk> [2000] +0xF99D U+8813 # <cjk> [2000] +0xF99E U+8828 # <cjk> [2000] +0xF99F U+882E # <cjk> [2000] +0xF9A0 U+8832 # <cjk> [2000] +0xF9A1 U+883C # <cjk> [2000] +0xF9A2 U+460F # <cjk> [2000] +0xF9A3 U+884A # <cjk> [2000] +0xF9A4 U+8858 # <cjk> [2000] +0xF9A5 U+885F # <cjk> [2000] +0xF9A6 U+8864 # <cjk> [2000] +0xF9A7 U+27615 # <cjk> [2000] [Unicode3.1] +0xF9A8 U+27614 # <cjk> [2000] [Unicode3.1] +0xF9A9 U+8869 # <cjk> [2000] +0xF9AA U+27631 # <cjk> [2000] [Unicode3.1] +0xF9AB U+886F # <cjk> [2000] +0xF9AC U+88A0 # <cjk> [2000] +0xF9AD U+88BC # <cjk> [2000] +0xF9AE U+88BD # <cjk> [2000] +0xF9AF U+88BE # <cjk> [2000] +0xF9B0 U+88C0 # <cjk> [2000] +0xF9B1 U+88D2 # <cjk> [2000] +0xF9B2 U+27693 # <cjk> [2000] [Unicode3.1] +0xF9B3 U+88D1 # <cjk> [2000] +0xF9B4 U+88D3 # <cjk> [2000] +0xF9B5 U+88DB # <cjk> [2000] +0xF9B6 U+88F0 # <cjk> [2000] +0xF9B7 U+88F1 # <cjk> [2000] +0xF9B8 U+4641 # <cjk> [2000] +0xF9B9 U+8901 # <cjk> [2000] +0xF9BA U+2770E # <cjk> [2000] [Unicode3.1] +0xF9BB U+8937 # <cjk> [2000] +0xF9BC U+27723 # <cjk> [2000] [Unicode3.1] +0xF9BD U+8942 # <cjk> [2000] +0xF9BE U+8945 # <cjk> [2000] +0xF9BF U+8949 # <cjk> [2000] +0xF9C0 U+27752 # <cjk> [2000] [Unicode3.1] +0xF9C1 U+4665 # <cjk> [2000] +0xF9C2 U+8962 # <cjk> [2000] +0xF9C3 U+8980 # <cjk> [2000] +0xF9C4 U+8989 # <cjk> [2000] +0xF9C5 U+8990 # <cjk> [2000] +0xF9C6 U+899F # <cjk> [2000] +0xF9C7 U+89B0 # <cjk> [2000] +0xF9C8 U+89B7 # <cjk> [2000] +0xF9C9 U+89D6 # <cjk> [2000] +0xF9CA U+89D8 # <cjk> [2000] +0xF9CB U+89EB # <cjk> [2000] +0xF9CC U+46A1 # <cjk> [2000] +0xF9CD U+89F1 # <cjk> [2000] +0xF9CE U+89F3 # <cjk> [2000] +0xF9CF U+89FD # <cjk> [2000] +0xF9D0 U+89FF # <cjk> [2000] +0xF9D1 U+46AF # <cjk> [2000] +0xF9D2 U+8A11 # <cjk> [2000] +0xF9D3 U+8A14 # <cjk> [2000] +0xF9D4 U+27985 # <cjk> [2000] [Unicode3.1] +0xF9D5 U+8A21 # <cjk> [2000] +0xF9D6 U+8A35 # <cjk> [2000] +0xF9D7 U+8A3E # <cjk> [2000] +0xF9D8 U+8A45 # <cjk> [2000] +0xF9D9 U+8A4D # <cjk> [2000] +0xF9DA U+8A58 # <cjk> [2000] +0xF9DB U+8AAE # <cjk> [2000] +0xF9DC U+8A90 # <cjk> [2000] +0xF9DD U+8AB7 # <cjk> [2000] +0xF9DE U+8ABE # <cjk> [2000] +0xF9DF U+8AD7 # <cjk> [2000] +0xF9E0 U+8AFC # <cjk> [2000] +0xF9E1 U+27A84 # <cjk> [2000] [Unicode3.1] +0xF9E2 U+8B0A # <cjk> [2000] +0xF9E3 U+8B05 # <cjk> [2000] +0xF9E4 U+8B0D # <cjk> [2000] +0xF9E5 U+8B1C # <cjk> [2000] +0xF9E6 U+8B1F # <cjk> [2000] +0xF9E7 U+8B2D # <cjk> [2000] +0xF9E8 U+8B43 # <cjk> [2000] +0xF9E9 U+470C # <cjk> [2000] +0xF9EA U+8B51 # <cjk> [2000] +0xF9EB U+8B5E # <cjk> [2000] +0xF9EC U+8B76 # <cjk> [2000] +0xF9ED U+8B7F # <cjk> [2000] +0xF9EE U+8B81 # <cjk> [2000] +0xF9EF U+8B8B # <cjk> [2000] +0xF9F0 U+8B94 # <cjk> [2000] +0xF9F1 U+8B95 # <cjk> [2000] +0xF9F2 U+8B9C # <cjk> [2000] +0xF9F3 U+8B9E # <cjk> [2000] +0xF9F4 U+8C39 # <cjk> [2000] +0xF9F5 U+27BB3 # <cjk> [2000] [Unicode3.1] +0xF9F6 U+8C3D # <cjk> [2000] +0xF9F7 U+27BBE # <cjk> [2000] [Unicode3.1] +0xF9F8 U+27BC7 # <cjk> [2000] [Unicode3.1] +0xF9F9 U+8C45 # <cjk> [2000] +0xF9FA U+8C47 # <cjk> [2000] +0xF9FB U+8C4F # <cjk> [2000] +0xF9FC U+8C54 # <cjk> [2000] +0xFA40 U+8C57 # <cjk> [2000] +0xFA41 U+8C69 # <cjk> [2000] +0xFA42 U+8C6D # <cjk> [2000] +0xFA43 U+8C73 # <cjk> [2000] +0xFA44 U+27CB8 # <cjk> [2000] [Unicode3.1] +0xFA45 U+8C93 # <cjk> [2000] +0xFA46 U+8C92 # <cjk> [2000] +0xFA47 U+8C99 # <cjk> [2000] +0xFA48 U+4764 # <cjk> [2000] +0xFA49 U+8C9B # <cjk> [2000] +0xFA4A U+8CA4 # <cjk> [2000] +0xFA4B U+8CD6 # <cjk> [2000] +0xFA4C U+8CD5 # <cjk> [2000] +0xFA4D U+8CD9 # <cjk> [2000] +0xFA4E U+27DA0 # <cjk> [2000] [Unicode3.1] +0xFA4F U+8CF0 # <cjk> [2000] +0xFA50 U+8CF1 # <cjk> [2000] +0xFA51 U+27E10 # <cjk> [2000] [Unicode3.1] +0xFA52 U+8D09 # <cjk> [2000] +0xFA53 U+8D0E # <cjk> [2000] +0xFA54 U+8D6C # <cjk> [2000] +0xFA55 U+8D84 # <cjk> [2000] +0xFA56 U+8D95 # <cjk> [2000] +0xFA57 U+8DA6 # <cjk> [2000] +0xFA58 U+27FB7 # <cjk> [2000] [Unicode3.1] +0xFA59 U+8DC6 # <cjk> [2000] +0xFA5A U+8DC8 # <cjk> [2000] +0xFA5B U+8DD9 # <cjk> [2000] +0xFA5C U+8DEC # <cjk> [2000] +0xFA5D U+8E0C # <cjk> [2000] +0xFA5E U+47FD # <cjk> [2000] +0xFA5F U+8DFD # <cjk> [2000] +0xFA60 U+8E06 # <cjk> [2000] +0xFA61 U+2808A # <cjk> [2000] [Unicode3.1] +0xFA62 U+8E14 # <cjk> [2000] +0xFA63 U+8E16 # <cjk> [2000] +0xFA64 U+8E21 # <cjk> [2000] +0xFA65 U+8E22 # <cjk> [2000] +0xFA66 U+8E27 # <cjk> [2000] +0xFA67 U+280BB # <cjk> [2000] [Unicode3.1] +0xFA68 U+4816 # <cjk> [2000] +0xFA69 U+8E36 # <cjk> [2000] +0xFA6A U+8E39 # <cjk> [2000] +0xFA6B U+8E4B # <cjk> [2000] +0xFA6C U+8E54 # <cjk> [2000] +0xFA6D U+8E62 # <cjk> [2000] +0xFA6E U+8E6C # <cjk> [2000] +0xFA6F U+8E6D # <cjk> [2000] +0xFA70 U+8E6F # <cjk> [2000] +0xFA71 U+8E98 # <cjk> [2000] +0xFA72 U+8E9E # <cjk> [2000] +0xFA73 U+8EAE # <cjk> [2000] +0xFA74 U+8EB3 # <cjk> [2000] +0xFA75 U+8EB5 # <cjk> [2000] +0xFA76 U+8EB6 # <cjk> [2000] +0xFA77 U+8EBB # <cjk> [2000] +0xFA78 U+28282 # <cjk> [2000] [Unicode3.1] +0xFA79 U+8ED1 # <cjk> [2000] +0xFA7A U+8ED4 # <cjk> [2000] +0xFA7B U+484E # <cjk> [2000] +0xFA7C U+8EF9 # <cjk> [2000] +0xFA7D U+282F3 # <cjk> [2000] [Unicode3.1] +0xFA7E U+8F00 # <cjk> [2000] +0xFA80 U+8F08 # <cjk> [2000] +0xFA81 U+8F17 # <cjk> [2000] +0xFA82 U+8F2B # <cjk> [2000] +0xFA83 U+8F40 # <cjk> [2000] +0xFA84 U+8F4A # <cjk> [2000] +0xFA85 U+8F58 # <cjk> [2000] +0xFA86 U+2840C # <cjk> [2000] [Unicode3.1] +0xFA87 U+8FA4 # <cjk> [2000] +0xFA88 U+8FB4 # <cjk> [2000] +0xFA89 U+FA66 # CJK COMPATIBILITY IDEOGRAPH-FA66 [2000] [Unicode3.2] +0xFA8A U+8FB6 # <cjk> [2000] +0xFA8B U+28455 # <cjk> [2000] [Unicode3.1] +0xFA8C U+8FC1 # <cjk> [2000] +0xFA8D U+8FC6 # <cjk> [2000] +0xFA8E U+FA24 # CJK COMPATIBILITY IDEOGRAPH-FA24 [2000] +0xFA8F U+8FCA # <cjk> [2000] +0xFA90 U+8FCD # <cjk> [2000] +0xFA91 U+8FD3 # <cjk> [2000] +0xFA92 U+8FD5 # <cjk> [2000] +0xFA93 U+8FE0 # <cjk> [2000] +0xFA94 U+8FF1 # <cjk> [2000] +0xFA95 U+8FF5 # <cjk> [2000] +0xFA96 U+8FFB # <cjk> [2000] +0xFA97 U+9002 # <cjk> [2000] +0xFA98 U+900C # <cjk> [2000] +0xFA99 U+9037 # <cjk> [2000] +0xFA9A U+2856B # <cjk> [2000] [Unicode3.1] +0xFA9B U+9043 # <cjk> [2000] +0xFA9C U+9044 # <cjk> [2000] +0xFA9D U+905D # <cjk> [2000] +0xFA9E U+285C8 # <cjk> [2000] [Unicode3.1] +0xFA9F U+285C9 # <cjk> [2000] [Unicode3.1] +0xFAA0 U+9085 # <cjk> [2000] +0xFAA1 U+908C # <cjk> [2000] +0xFAA2 U+9090 # <cjk> [2000] +0xFAA3 U+961D # <cjk> [2000] +0xFAA4 U+90A1 # <cjk> [2000] +0xFAA5 U+48B5 # <cjk> [2000] +0xFAA6 U+90B0 # <cjk> [2000] +0xFAA7 U+90B6 # <cjk> [2000] +0xFAA8 U+90C3 # <cjk> [2000] +0xFAA9 U+90C8 # <cjk> [2000] +0xFAAA U+286D7 # <cjk> [2000] [Unicode3.1] +0xFAAB U+90DC # <cjk> [2000] +0xFAAC U+90DF # <cjk> [2000] +0xFAAD U+286FA # <cjk> [2000] [Unicode3.1] +0xFAAE U+90F6 # <cjk> [2000] +0xFAAF U+90F2 # <cjk> [2000] +0xFAB0 U+9100 # <cjk> [2000] +0xFAB1 U+90EB # <cjk> [2000] +0xFAB2 U+90FE # <cjk> [2000] +0xFAB3 U+90FF # <cjk> [2000] +0xFAB4 U+9104 # <cjk> [2000] +0xFAB5 U+9106 # <cjk> [2000] +0xFAB6 U+9118 # <cjk> [2000] +0xFAB7 U+911C # <cjk> [2000] +0xFAB8 U+911E # <cjk> [2000] +0xFAB9 U+9137 # <cjk> [2000] +0xFABA U+9139 # <cjk> [2000] +0xFABB U+913A # <cjk> [2000] +0xFABC U+9146 # <cjk> [2000] +0xFABD U+9147 # <cjk> [2000] +0xFABE U+9157 # <cjk> [2000] +0xFABF U+9159 # <cjk> [2000] +0xFAC0 U+9161 # <cjk> [2000] +0xFAC1 U+9164 # <cjk> [2000] +0xFAC2 U+9174 # <cjk> [2000] +0xFAC3 U+9179 # <cjk> [2000] +0xFAC4 U+9185 # <cjk> [2000] +0xFAC5 U+918E # <cjk> [2000] +0xFAC6 U+91A8 # <cjk> [2000] +0xFAC7 U+91AE # <cjk> [2000] +0xFAC8 U+91B3 # <cjk> [2000] +0xFAC9 U+91B6 # <cjk> [2000] +0xFACA U+91C3 # <cjk> [2000] +0xFACB U+91C4 # <cjk> [2000] +0xFACC U+91DA # <cjk> [2000] +0xFACD U+28949 # <cjk> [2000] [Unicode3.1] +0xFACE U+28946 # <cjk> [2000] [Unicode3.1] +0xFACF U+91EC # <cjk> [2000] +0xFAD0 U+91EE # <cjk> [2000] +0xFAD1 U+9201 # <cjk> [2000] +0xFAD2 U+920A # <cjk> [2000] +0xFAD3 U+9216 # <cjk> [2000] +0xFAD4 U+9217 # <cjk> [2000] +0xFAD5 U+2896B # <cjk> [2000] [Unicode3.1] +0xFAD6 U+9233 # <cjk> [2000] +0xFAD7 U+9242 # <cjk> [2000] +0xFAD8 U+9247 # <cjk> [2000] +0xFAD9 U+924A # <cjk> [2000] +0xFADA U+924E # <cjk> [2000] +0xFADB U+9251 # <cjk> [2000] +0xFADC U+9256 # <cjk> [2000] +0xFADD U+9259 # <cjk> [2000] +0xFADE U+9260 # <cjk> [2000] +0xFADF U+9261 # <cjk> [2000] +0xFAE0 U+9265 # <cjk> [2000] +0xFAE1 U+9267 # <cjk> [2000] +0xFAE2 U+9268 # <cjk> [2000] +0xFAE3 U+28987 # <cjk> [2000] [Unicode3.1] +0xFAE4 U+28988 # <cjk> [2000] [Unicode3.1] +0xFAE5 U+927C # <cjk> [2000] +0xFAE6 U+927D # <cjk> [2000] +0xFAE7 U+927F # <cjk> [2000] +0xFAE8 U+9289 # <cjk> [2000] +0xFAE9 U+928D # <cjk> [2000] +0xFAEA U+9297 # <cjk> [2000] +0xFAEB U+9299 # <cjk> [2000] +0xFAEC U+929F # <cjk> [2000] +0xFAED U+92A7 # <cjk> [2000] +0xFAEE U+92AB # <cjk> [2000] +0xFAEF U+289BA # <cjk> [2000] [Unicode3.1] +0xFAF0 U+289BB # <cjk> [2000] [Unicode3.1] +0xFAF1 U+92B2 # <cjk> [2000] +0xFAF2 U+92BF # <cjk> [2000] +0xFAF3 U+92C0 # <cjk> [2000] +0xFAF4 U+92C6 # <cjk> [2000] +0xFAF5 U+92CE # <cjk> [2000] +0xFAF6 U+92D0 # <cjk> [2000] +0xFAF7 U+92D7 # <cjk> [2000] +0xFAF8 U+92D9 # <cjk> [2000] +0xFAF9 U+92E5 # <cjk> [2000] +0xFAFA U+92E7 # <cjk> [2000] +0xFAFB U+9311 # <cjk> [2000] +0xFAFC U+28A1E # <cjk> [2000] [Unicode3.1] +0xFB40 U+28A29 # <cjk> [2000] [Unicode3.1] +0xFB41 U+92F7 # <cjk> [2000] +0xFB42 U+92F9 # <cjk> [2000] +0xFB43 U+92FB # <cjk> [2000] +0xFB44 U+9302 # <cjk> [2000] +0xFB45 U+930D # <cjk> [2000] +0xFB46 U+9315 # <cjk> [2000] +0xFB47 U+931D # <cjk> [2000] +0xFB48 U+931E # <cjk> [2000] +0xFB49 U+9327 # <cjk> [2000] +0xFB4A U+9329 # <cjk> [2000] +0xFB4B U+28A71 # <cjk> [2000] [Unicode3.1] +0xFB4C U+28A43 # <cjk> [2000] [Unicode3.1] +0xFB4D U+9347 # <cjk> [2000] +0xFB4E U+9351 # <cjk> [2000] +0xFB4F U+9357 # <cjk> [2000] +0xFB50 U+935A # <cjk> [2000] +0xFB51 U+936B # <cjk> [2000] +0xFB52 U+9371 # <cjk> [2000] +0xFB53 U+9373 # <cjk> [2000] +0xFB54 U+93A1 # <cjk> [2000] +0xFB55 U+28A99 # <cjk> [2000] [Unicode3.1] +0xFB56 U+28ACD # <cjk> [2000] [Unicode3.1] +0xFB57 U+9388 # <cjk> [2000] +0xFB58 U+938B # <cjk> [2000] +0xFB59 U+938F # <cjk> [2000] +0xFB5A U+939E # <cjk> [2000] +0xFB5B U+93F5 # <cjk> [2000] +0xFB5C U+28AE4 # <cjk> [2000] [Unicode3.1] +0xFB5D U+28ADD # <cjk> [2000] [Unicode3.1] +0xFB5E U+93F1 # <cjk> [2000] +0xFB5F U+93C1 # <cjk> [2000] +0xFB60 U+93C7 # <cjk> [2000] +0xFB61 U+93DC # <cjk> [2000] +0xFB62 U+93E2 # <cjk> [2000] +0xFB63 U+93E7 # <cjk> [2000] +0xFB64 U+9409 # <cjk> [2000] +0xFB65 U+940F # <cjk> [2000] +0xFB66 U+9416 # <cjk> [2000] +0xFB67 U+9417 # <cjk> [2000] +0xFB68 U+93FB # <cjk> [2000] +0xFB69 U+9432 # <cjk> [2000] +0xFB6A U+9434 # <cjk> [2000] +0xFB6B U+943B # <cjk> [2000] +0xFB6C U+9445 # <cjk> [2000] +0xFB6D U+28BC1 # <cjk> [2000] [Unicode3.1] +0xFB6E U+28BEF # <cjk> [2000] [Unicode3.1] +0xFB6F U+946D # <cjk> [2000] +0xFB70 U+946F # <cjk> [2000] +0xFB71 U+9578 # <cjk> [2000] +0xFB72 U+9579 # <cjk> [2000] +0xFB73 U+9586 # <cjk> [2000] +0xFB74 U+958C # <cjk> [2000] +0xFB75 U+958D # <cjk> [2000] +0xFB76 U+28D10 # <cjk> [2000] [Unicode3.1] +0xFB77 U+95AB # <cjk> [2000] +0xFB78 U+95B4 # <cjk> [2000] +0xFB79 U+28D71 # <cjk> [2000] [Unicode3.1] +0xFB7A U+95C8 # <cjk> [2000] +0xFB7B U+28DFB # <cjk> [2000] [Unicode3.1] +0xFB7C U+28E1F # <cjk> [2000] [Unicode3.1] +0xFB7D U+962C # <cjk> [2000] +0xFB7E U+9633 # <cjk> [2000] +0xFB80 U+9634 # <cjk> [2000] +0xFB81 U+28E36 # <cjk> [2000] [Unicode3.1] +0xFB82 U+963C # <cjk> [2000] +0xFB83 U+9641 # <cjk> [2000] +0xFB84 U+9661 # <cjk> [2000] +0xFB85 U+28E89 # <cjk> [2000] [Unicode3.1] +0xFB86 U+9682 # <cjk> [2000] +0xFB87 U+28EEB # <cjk> [2000] [Unicode3.1] +0xFB88 U+969A # <cjk> [2000] +0xFB89 U+28F32 # <cjk> [2000] [Unicode3.1] +0xFB8A U+49E7 # <cjk> [2000] +0xFB8B U+96A9 # <cjk> [2000] +0xFB8C U+96AF # <cjk> [2000] +0xFB8D U+96B3 # <cjk> [2000] +0xFB8E U+96BA # <cjk> [2000] +0xFB8F U+96BD # <cjk> [2000] +0xFB90 U+49FA # <cjk> [2000] +0xFB91 U+28FF8 # <cjk> [2000] [Unicode3.1] +0xFB92 U+96D8 # <cjk> [2000] +0xFB93 U+96DA # <cjk> [2000] +0xFB94 U+96DD # <cjk> [2000] +0xFB95 U+4A04 # <cjk> [2000] +0xFB96 U+9714 # <cjk> [2000] +0xFB97 U+9723 # <cjk> [2000] +0xFB98 U+4A29 # <cjk> [2000] +0xFB99 U+9736 # <cjk> [2000] +0xFB9A U+9741 # <cjk> [2000] +0xFB9B U+9747 # <cjk> [2000] +0xFB9C U+9755 # <cjk> [2000] +0xFB9D U+9757 # <cjk> [2000] +0xFB9E U+975B # <cjk> [2000] +0xFB9F U+976A # <cjk> [2000] +0xFBA0 U+292A0 # <cjk> [2000] [Unicode3.1] +0xFBA1 U+292B1 # <cjk> [2000] [Unicode3.1] +0xFBA2 U+9796 # <cjk> [2000] +0xFBA3 U+979A # <cjk> [2000] +0xFBA4 U+979E # <cjk> [2000] +0xFBA5 U+97A2 # <cjk> [2000] +0xFBA6 U+97B1 # <cjk> [2000] +0xFBA7 U+97B2 # <cjk> [2000] +0xFBA8 U+97BE # <cjk> [2000] +0xFBA9 U+97CC # <cjk> [2000] +0xFBAA U+97D1 # <cjk> [2000] +0xFBAB U+97D4 # <cjk> [2000] +0xFBAC U+97D8 # <cjk> [2000] +0xFBAD U+97D9 # <cjk> [2000] +0xFBAE U+97E1 # <cjk> [2000] +0xFBAF U+97F1 # <cjk> [2000] +0xFBB0 U+9804 # <cjk> [2000] +0xFBB1 U+980D # <cjk> [2000] +0xFBB2 U+980E # <cjk> [2000] +0xFBB3 U+9814 # <cjk> [2000] +0xFBB4 U+9816 # <cjk> [2000] +0xFBB5 U+4ABC # <cjk> [2000] +0xFBB6 U+29490 # <cjk> [2000] [Unicode3.1] +0xFBB7 U+9823 # <cjk> [2000] +0xFBB8 U+9832 # <cjk> [2000] +0xFBB9 U+9833 # <cjk> [2000] +0xFBBA U+9825 # <cjk> [2000] +0xFBBB U+9847 # <cjk> [2000] +0xFBBC U+9866 # <cjk> [2000] +0xFBBD U+98AB # <cjk> [2000] +0xFBBE U+98AD # <cjk> [2000] +0xFBBF U+98B0 # <cjk> [2000] +0xFBC0 U+295CF # <cjk> [2000] [Unicode3.1] +0xFBC1 U+98B7 # <cjk> [2000] +0xFBC2 U+98B8 # <cjk> [2000] +0xFBC3 U+98BB # <cjk> [2000] +0xFBC4 U+98BC # <cjk> [2000] +0xFBC5 U+98BF # <cjk> [2000] +0xFBC6 U+98C2 # <cjk> [2000] +0xFBC7 U+98C7 # <cjk> [2000] +0xFBC8 U+98CB # <cjk> [2000] +0xFBC9 U+98E0 # <cjk> [2000] +0xFBCA U+2967F # <cjk> [2000] [Unicode3.1] +0xFBCB U+98E1 # <cjk> [2000] +0xFBCC U+98E3 # <cjk> [2000] +0xFBCD U+98E5 # <cjk> [2000] +0xFBCE U+98EA # <cjk> [2000] +0xFBCF U+98F0 # <cjk> [2000] +0xFBD0 U+98F1 # <cjk> [2000] +0xFBD1 U+98F3 # <cjk> [2000] +0xFBD2 U+9908 # <cjk> [2000] +0xFBD3 U+4B3B # <cjk> [2000] +0xFBD4 U+296F0 # <cjk> [2000] [Unicode3.1] +0xFBD5 U+9916 # <cjk> [2000] +0xFBD6 U+9917 # <cjk> [2000] +0xFBD7 U+29719 # <cjk> [2000] [Unicode3.1] +0xFBD8 U+991A # <cjk> [2000] +0xFBD9 U+991B # <cjk> [2000] +0xFBDA U+991C # <cjk> [2000] +0xFBDB U+29750 # <cjk> [2000] [Unicode3.1] +0xFBDC U+9931 # <cjk> [2000] +0xFBDD U+9932 # <cjk> [2000] +0xFBDE U+9933 # <cjk> [2000] +0xFBDF U+993A # <cjk> [2000] +0xFBE0 U+993B # <cjk> [2000] +0xFBE1 U+993C # <cjk> [2000] +0xFBE2 U+9940 # <cjk> [2000] +0xFBE3 U+9941 # <cjk> [2000] +0xFBE4 U+9946 # <cjk> [2000] +0xFBE5 U+994D # <cjk> [2000] +0xFBE6 U+994E # <cjk> [2000] +0xFBE7 U+995C # <cjk> [2000] +0xFBE8 U+995F # <cjk> [2000] +0xFBE9 U+9960 # <cjk> [2000] +0xFBEA U+99A3 # <cjk> [2000] +0xFBEB U+99A6 # <cjk> [2000] +0xFBEC U+99B9 # <cjk> [2000] +0xFBED U+99BD # <cjk> [2000] +0xFBEE U+99BF # <cjk> [2000] +0xFBEF U+99C3 # <cjk> [2000] +0xFBF0 U+99C9 # <cjk> [2000] +0xFBF1 U+99D4 # <cjk> [2000] +0xFBF2 U+99D9 # <cjk> [2000] +0xFBF3 U+99DE # <cjk> [2000] +0xFBF4 U+298C6 # <cjk> [2000] [Unicode3.1] +0xFBF5 U+99F0 # <cjk> [2000] +0xFBF6 U+99F9 # <cjk> [2000] +0xFBF7 U+99FC # <cjk> [2000] +0xFBF8 U+9A0A # <cjk> [2000] +0xFBF9 U+9A11 # <cjk> [2000] +0xFBFA U+9A16 # <cjk> [2000] +0xFBFB U+9A1A # <cjk> [2000] +0xFBFC U+9A20 # <cjk> [2000] +0xFC40 U+9A31 # <cjk> [2000] +0xFC41 U+9A36 # <cjk> [2000] +0xFC42 U+9A44 # <cjk> [2000] +0xFC43 U+9A4C # <cjk> [2000] +0xFC44 U+9A58 # <cjk> [2000] +0xFC45 U+4BC2 # <cjk> [2000] +0xFC46 U+9AAF # <cjk> [2000] +0xFC47 U+4BCA # <cjk> [2000] +0xFC48 U+9AB7 # <cjk> [2000] +0xFC49 U+4BD2 # <cjk> [2000] +0xFC4A U+9AB9 # <cjk> [2000] +0xFC4B U+29A72 # <cjk> [2000] [Unicode3.1] +0xFC4C U+9AC6 # <cjk> [2000] +0xFC4D U+9AD0 # <cjk> [2000] +0xFC4E U+9AD2 # <cjk> [2000] +0xFC4F U+9AD5 # <cjk> [2000] +0xFC50 U+4BE8 # <cjk> [2000] +0xFC51 U+9ADC # <cjk> [2000] +0xFC52 U+9AE0 # <cjk> [2000] +0xFC53 U+9AE5 # <cjk> [2000] +0xFC54 U+9AE9 # <cjk> [2000] +0xFC55 U+9B03 # <cjk> [2000] +0xFC56 U+9B0C # <cjk> [2000] +0xFC57 U+9B10 # <cjk> [2000] +0xFC58 U+9B12 # <cjk> [2000] +0xFC59 U+9B16 # <cjk> [2000] +0xFC5A U+9B1C # <cjk> [2000] +0xFC5B U+9B2B # <cjk> [2000] +0xFC5C U+9B33 # <cjk> [2000] +0xFC5D U+9B3D # <cjk> [2000] +0xFC5E U+4C20 # <cjk> [2000] +0xFC5F U+9B4B # <cjk> [2000] +0xFC60 U+9B63 # <cjk> [2000] +0xFC61 U+9B65 # <cjk> [2000] +0xFC62 U+9B6B # <cjk> [2000] +0xFC63 U+9B6C # <cjk> [2000] +0xFC64 U+9B73 # <cjk> [2000] +0xFC65 U+9B76 # <cjk> [2000] +0xFC66 U+9B77 # <cjk> [2000] +0xFC67 U+9BA6 # <cjk> [2000] +0xFC68 U+9BAC # <cjk> [2000] +0xFC69 U+9BB1 # <cjk> [2000] +0xFC6A U+29DDB # <cjk> [2000] [Unicode3.1] +0xFC6B U+29E3D # <cjk> [2000] [Unicode3.1] +0xFC6C U+9BB2 # <cjk> [2000] +0xFC6D U+9BB8 # <cjk> [2000] +0xFC6E U+9BBE # <cjk> [2000] +0xFC6F U+9BC7 # <cjk> [2000] +0xFC70 U+9BF3 # <cjk> [2000] +0xFC71 U+9BD8 # <cjk> [2000] +0xFC72 U+9BDD # <cjk> [2000] +0xFC73 U+9BE7 # <cjk> [2000] +0xFC74 U+9BEA # <cjk> [2000] +0xFC75 U+9BEB # <cjk> [2000] +0xFC76 U+9BEF # <cjk> [2000] +0xFC77 U+9BEE # <cjk> [2000] +0xFC78 U+29E15 # <cjk> [2000] [Unicode3.1] +0xFC79 U+9BFA # <cjk> [2000] +0xFC7A U+29E8A # <cjk> [2000] [Unicode3.1] +0xFC7B U+9BF7 # <cjk> [2000] +0xFC7C U+29E49 # <cjk> [2000] [Unicode3.1] +0xFC7D U+9C16 # <cjk> [2000] +0xFC7E U+9C18 # <cjk> [2000] +0xFC80 U+9C19 # <cjk> [2000] +0xFC81 U+9C1A # <cjk> [2000] +0xFC82 U+9C1D # <cjk> [2000] +0xFC83 U+9C22 # <cjk> [2000] +0xFC84 U+9C27 # <cjk> [2000] +0xFC85 U+9C29 # <cjk> [2000] +0xFC86 U+9C2A # <cjk> [2000] +0xFC87 U+29EC4 # <cjk> [2000] [Unicode3.1] +0xFC88 U+9C31 # <cjk> [2000] +0xFC89 U+9C36 # <cjk> [2000] +0xFC8A U+9C37 # <cjk> [2000] +0xFC8B U+9C45 # <cjk> [2000] +0xFC8C U+9C5C # <cjk> [2000] +0xFC8D U+29EE9 # <cjk> [2000] [Unicode3.1] +0xFC8E U+9C49 # <cjk> [2000] +0xFC8F U+9C4A # <cjk> [2000] +0xFC90 U+29EDB # <cjk> [2000] [Unicode3.1] +0xFC91 U+9C54 # <cjk> [2000] +0xFC92 U+9C58 # <cjk> [2000] +0xFC93 U+9C5B # <cjk> [2000] +0xFC94 U+9C5D # <cjk> [2000] +0xFC95 U+9C5F # <cjk> [2000] +0xFC96 U+9C69 # <cjk> [2000] +0xFC97 U+9C6A # <cjk> [2000] +0xFC98 U+9C6B # <cjk> [2000] +0xFC99 U+9C6D # <cjk> [2000] +0xFC9A U+9C6E # <cjk> [2000] +0xFC9B U+9C70 # <cjk> [2000] +0xFC9C U+9C72 # <cjk> [2000] +0xFC9D U+9C75 # <cjk> [2000] +0xFC9E U+9C7A # <cjk> [2000] +0xFC9F U+9CE6 # <cjk> [2000] +0xFCA0 U+9CF2 # <cjk> [2000] +0xFCA1 U+9D0B # <cjk> [2000] +0xFCA2 U+9D02 # <cjk> [2000] +0xFCA3 U+29FCE # <cjk> [2000] [Unicode3.1] +0xFCA4 U+9D11 # <cjk> [2000] +0xFCA5 U+9D17 # <cjk> [2000] +0xFCA6 U+9D18 # <cjk> [2000] +0xFCA7 U+2A02F # <cjk> [2000] [Unicode3.1] +0xFCA8 U+4CC4 # <cjk> [2000] +0xFCA9 U+2A01A # <cjk> [2000] [Unicode3.1] +0xFCAA U+9D32 # <cjk> [2000] +0xFCAB U+4CD1 # <cjk> [2000] +0xFCAC U+9D42 # <cjk> [2000] +0xFCAD U+9D4A # <cjk> [2000] +0xFCAE U+9D5F # <cjk> [2000] +0xFCAF U+9D62 # <cjk> [2000] +0xFCB0 U+2A0F9 # <cjk> [2000] [Unicode3.1] +0xFCB1 U+9D69 # <cjk> [2000] +0xFCB2 U+9D6B # <cjk> [2000] +0xFCB3 U+2A082 # <cjk> [2000] [Unicode3.1] +0xFCB4 U+9D73 # <cjk> [2000] +0xFCB5 U+9D76 # <cjk> [2000] +0xFCB6 U+9D77 # <cjk> [2000] +0xFCB7 U+9D7E # <cjk> [2000] +0xFCB8 U+9D84 # <cjk> [2000] +0xFCB9 U+9D8D # <cjk> [2000] +0xFCBA U+9D99 # <cjk> [2000] +0xFCBB U+9DA1 # <cjk> [2000] +0xFCBC U+9DBF # <cjk> [2000] +0xFCBD U+9DB5 # <cjk> [2000] +0xFCBE U+9DB9 # <cjk> [2000] +0xFCBF U+9DBD # <cjk> [2000] +0xFCC0 U+9DC3 # <cjk> [2000] +0xFCC1 U+9DC7 # <cjk> [2000] +0xFCC2 U+9DC9 # <cjk> [2000] +0xFCC3 U+9DD6 # <cjk> [2000] +0xFCC4 U+9DDA # <cjk> [2000] +0xFCC5 U+9DDF # <cjk> [2000] +0xFCC6 U+9DE0 # <cjk> [2000] +0xFCC7 U+9DE3 # <cjk> [2000] +0xFCC8 U+9DF4 # <cjk> [2000] +0xFCC9 U+4D07 # <cjk> [2000] +0xFCCA U+9E0A # <cjk> [2000] +0xFCCB U+9E02 # <cjk> [2000] +0xFCCC U+9E0D # <cjk> [2000] +0xFCCD U+9E19 # <cjk> [2000] +0xFCCE U+9E1C # <cjk> [2000] +0xFCCF U+9E1D # <cjk> [2000] +0xFCD0 U+9E7B # <cjk> [2000] +0xFCD1 U+22218 # <cjk> [2000] [Unicode3.1] +0xFCD2 U+9E80 # <cjk> [2000] +0xFCD3 U+9E85 # <cjk> [2000] +0xFCD4 U+9E9B # <cjk> [2000] +0xFCD5 U+9EA8 # <cjk> [2000] +0xFCD6 U+2A38C # <cjk> [2000] [Unicode3.1] +0xFCD7 U+9EBD # <cjk> [2000] +0xFCD8 U+2A437 # <cjk> [2000] [Unicode3.1] +0xFCD9 U+9EDF # <cjk> [2000] +0xFCDA U+9EE7 # <cjk> [2000] +0xFCDB U+9EEE # <cjk> [2000] +0xFCDC U+9EFF # <cjk> [2000] +0xFCDD U+9F02 # <cjk> [2000] +0xFCDE U+4D77 # <cjk> [2000] +0xFCDF U+9F03 # <cjk> [2000] +0xFCE0 U+9F17 # <cjk> [2000] +0xFCE1 U+9F19 # <cjk> [2000] +0xFCE2 U+9F2F # <cjk> [2000] +0xFCE3 U+9F37 # <cjk> [2000] +0xFCE4 U+9F3A # <cjk> [2000] +0xFCE5 U+9F3D # <cjk> [2000] +0xFCE6 U+9F41 # <cjk> [2000] +0xFCE7 U+9F45 # <cjk> [2000] +0xFCE8 U+9F46 # <cjk> [2000] +0xFCE9 U+9F53 # <cjk> [2000] +0xFCEA U+9F55 # <cjk> [2000] +0xFCEB U+9F58 # <cjk> [2000] +0xFCEC U+2A5F1 # <cjk> [2000] [Unicode3.1] +0xFCED U+9F5D # <cjk> [2000] +0xFCEE U+2A602 # <cjk> [2000] [Unicode3.1] +0xFCEF U+9F69 # <cjk> [2000] +0xFCF0 U+2A61A # <cjk> [2000] [Unicode3.1] +0xFCF1 U+9F6D # <cjk> [2000] +0xFCF2 U+9F70 # <cjk> [2000] +0xFCF3 U+9F75 # <cjk> [2000] +0xFCF4 U+2A6B2 # <cjk> [2000] [Unicode3.1] diff --git a/ext/mbstring/tests/encoding_tests.inc b/ext/mbstring/tests/encoding_tests.inc new file mode 100644 index 0000000000..e95bc8fd09 --- /dev/null +++ b/ext/mbstring/tests/encoding_tests.inc @@ -0,0 +1,225 @@ +<?php + +// Common code for tests which focus on conversion and verification of text +// in some specific encoding + +// Read a file with one character and its equivalent Unicode codepoint on each +// line, delimited by tabs +function readConversionTable($path, &$from, &$to, $utf32 = false) { + $from = array(); + $to = array(); + + $fp = fopen($path, 'r+'); + while ($line = fgets($fp, 256)) { + if ($line[0] == '#') + continue; + if (sscanf($line, "0x%x\t0x%x", $char, $codepoint) == 2) { + $codepoint = $utf32 ? pack('N', $codepoint) : pack('n', $codepoint); + if ($char <= 0xFF) + $char = chr($char); // hex codes must not have leading zero bytes + else if ($char <= 0xFFFF) + $char = pack('n', $char); + else if ($char <= 0xFFFFFF) + $char = chr($char >> 16) . pack('n', $char & 0xFFFF); + else + $char = pack('N', $char); + $from[$char] = $codepoint; + $to[$codepoint] = $char; + } + } +} + +function dbgPrint($str) { + $result = ''; + if (mb_check_encoding($str, 'ASCII')) + $result .= '"' . $str . '" '; + return $result . "(" . bin2hex($str) . ")"; +} + +function identifyValidString($goodString, $encoding) { + $result = mb_check_encoding($goodString, $encoding); + if (!$result) + die("mb_check_encoding failed on good $encoding string: " . dbgPrint($goodString)); +} + +function identifyInvalidString($badString, $encoding) { + $result = mb_check_encoding($badString, $encoding); + if ($result) + die("mb_check_encoding passed on bad $encoding string: " . dbgPrint($badString)); +} + +function testConversion($fromString, $toString, $fromEncoding, $toEncoding) { + $result = mb_convert_encoding($fromString, $toEncoding, $fromEncoding); + if ($result !== $toString) + die("mb_convert_encoding not working on $fromEncoding input: " . dbgPrint($fromString) . "\nExpected $toEncoding: " . dbgPrint($toString) . "\nActually got: " . dbgPrint($result)); +} + +function testValidConversion($fromString, $toString, $fromEncoding, $toEncoding) { + $illegalChars = mb_get_info('illegal_chars'); + testConversion($fromString, $toString, $fromEncoding, $toEncoding); + if (mb_get_info('illegal_chars') !== $illegalChars) + die("mb_convert_encoding incremented illegal_chars on valid $fromEncoding string: " . dbgPrint($fromString) . " when converting to $toEncoding"); +} + +function convertValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays = true) { + testValidConversion($fromString, $toString, $fromEncoding, $toEncoding); + if ($bothWays) + testValidConversion($toString, $fromString, $toEncoding, $fromEncoding); +} + +function convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding) { + $illegalChars = mb_get_info('illegal_chars'); + testConversion($fromString, $toString, $fromEncoding, $toEncoding); + if (mb_get_info('illegal_chars') <= $illegalChars) + die("mb_convert_encoding did not increment illegal_chars on invalid $fromEncoding string: " . dbgPrint($fromString) . " when converting to $toEncoding"); +} + +function testValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays = true) { + identifyValidString($fromString, $fromEncoding); + convertValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays); +} + +function testInvalidString($fromString, $toString, $fromEncoding, $toEncoding) { + identifyInvalidString($fromString, $fromEncoding); + convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding); +} + +// Only for encodings where valid characters can be concatenated together in any +// way, without any escape sequences +function testAllValidChars($charMap, $fromEncoding, $toEncoding, $bothWays = true) { + $goodChars = array_keys($charMap); + shuffle($goodChars); + while (!empty($goodChars)) { + $length = min(rand(5,10), count($goodChars)); + $fromString = $toString = ''; + while ($length--) { + $goodChar = array_pop($goodChars); + $fromString .= $goodChar; + $toString .= $charMap[$goodChar]; + } + + testValidString($fromString, $toString, $fromEncoding, $toEncoding, $bothWays); + } +} + +function testAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $replacement) { + $badChars = array_keys($badChars); + $goodChars = array(); + while (!empty($badChars)) { + if (empty($goodChars)) { + $goodChars = array_keys($charMap); + shuffle($goodChars); + } + $goodChar = array_pop($goodChars); + $fromString = array_pop($badChars) . $goodChar; + $toString = $replacement . $charMap[$goodChar]; + + testInvalidString($fromString, $toString, $fromEncoding, $toEncoding); + } +} + +function convertAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $replacement) { + $badChars = array_keys($badChars); + $goodChars = array(); + while (!empty($badChars)) { + if (empty($goodChars)) { + $goodChars = array_keys($charMap); + shuffle($goodChars); + } + $goodChar = array_pop($goodChars); + $fromString = array_pop($badChars) . $goodChar; + $toString = $replacement . $charMap[$goodChar]; + + convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding); + } +} + +function testTruncatedChars($truncated, $fromEncoding, $toEncoding, $replacement) { + $truncatedChars = array_keys($truncated); + foreach ($truncatedChars as $truncatedChar) { + testInvalidString($truncatedChar, $replacement, $fromEncoding, $toEncoding); + } +} + +// For variable-width encodings, where we have an exhaustive list of +// all valid characters of any width +// +// `$startBytes` maps from first-byte values to the corresponding character length +// (For encodings where the first byte can tell you the length of a multi-byte +// character) +// Note that `$startBytes` can be partial! +function findInvalidChars($valid, &$invalid, &$truncated, $startBytes = array()) { + $invalid = array(); + $truncated = array(); + $prefixes = array(); /* All sequences which are not (but can start) a valid character */ + + foreach ($valid as $char => $unicode) { + for ($len = 1; $len < strlen($char); $len++) + $prefixes[substr($char, 0, $len)] = true; + } + + $varLength = function($prefix) use($valid, &$invalid, &$truncated) { + for ($byte = 0; $byte < 256; $byte++) { + $str = $prefix . chr($byte); + if (!isset($valid[$str])) { + if (isset($prefixes[$str])) { + $truncated[$str] = true; + $varLength($str); + } else { + $invalid[$str] = true; + } + } + } + }; + + $fixedLength = function($prefix, $remaining) use($valid, &$invalid, &$truncated, &$fixedLength) { + if ($remaining == 0) { + if (!isset($valid[$prefix])) + $invalid[$prefix] = true; + } else if ($remaining == 1) { + $truncated[$prefix] = true; + for ($i = 0; $i < 256; $i++) { + $str = $prefix . chr($i); + if (!isset($valid[$str])) + $invalid[$str] = true; + } + } else { + $truncated[$prefix] = true; + for ($i = 0; $i < 256; $i++) + $fixedLength($prefix . chr($i), $remaining - 1); + } + }; + + for ($byte = 0; $byte < 256; $byte++) { + if (isset($startBytes[$byte])) { + $fixedLength(chr($byte), $startBytes[$byte] - 1); + } else { + $str = chr($byte); + if (!isset($valid[$str])) { + if (isset($prefixes[$str])) { + $truncated[$str] = true; + $varLength($str); + } else { + $invalid[$str] = true; + } + } + } + } +} + +function testEncodingFromUTF16ConversionTable($path, $encoding, $replacement = '%', $startBytes = array()) { + srand(1000); // Make results consistent + mb_substitute_character(0x25); // '%' + readConversionTable($path, $toUnicode, $fromUnicode); + + findInvalidChars($toUnicode, $invalid, $truncated, $startBytes); + testAllValidChars($toUnicode, $encoding, 'UTF-16BE'); + testAllInvalidChars($invalid, $toUnicode, $encoding, 'UTF-16BE', "\x00%"); + testTruncatedChars($truncated, $encoding, 'UTF-16BE', "\x00%"); + echo "Tested $encoding -> UTF-16BE\n"; + + findInvalidChars($fromUnicode, $invalid, $unused, array_fill_keys(range(0,0xFF), 2)); + convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', $encoding, $replacement); + echo "Tested UTF-16BE -> $encoding\n"; +} +?> diff --git a/ext/mbstring/tests/eucjp_encoding.phpt b/ext/mbstring/tests/eucjp_encoding.phpt new file mode 100644 index 0000000000..dc321d3bae --- /dev/null +++ b/ext/mbstring/tests/eucjp_encoding.phpt @@ -0,0 +1,81 @@ +--TEST-- +Exhaustive test of EUC-JP encoding verification and conversion +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +srand(555); /* Make results consistent */ +include('encoding_tests.inc'); +mb_substitute_character(0x25); // '%' + +/* Read in the table of all characters in EUC-JP */ +readConversionTable(__DIR__ . '/data/EUC-JP.txt', $validChars, $fromUnicode, true); + +/* The JIS X 0208 character set does not have a single, straightforward + * mapping to the Unicode character set */ + +/* Kuten code 0x2140 (EUC-JP 0xA1C0) is a backslash; this can be mapped to + * 0x005C for an ordinary backslash, or 0xFF3C for a _fullwidth_ one + * We go with fullwidth */ +$validChars["\xA1\xC0"] = "\x00\x00\xFF\x3C"; +$fromUnicode["\x00\x00\xFF\x3C"] = "\xA1\xC0"; + +/* Unicode has both halfwidth and fullwidth NOT SIGN; convert both of them + * to JIS X 0208 NOT SIGN */ +$fromUnicode["\x00\x00\xFF\xE2"] = "\xA2\xCC"; +/* Likewise for fullwidth and halfwidth POUND SIGN */ +$fromUnicode["\x00\x00\xFF\xE1"] = "\xA1\xF2"; +/* Likewise for fullwidth and halfwidth CENT SIGN */ +$fromUnicode["\x00\x00\xFF\xE0"] = "\xA1\xF1"; +/* Convert Unicode FULLWIDTH TILDE to JIS X 0208 WAVE DASH */ +$fromUnicode["\x00\x00\xFF\x5E"] = "\xA1\xC1"; +/* Convert Unicode FULLWIDTH HYPHEN-MINUS to JIS X 0208 MINUS SIGN */ +$fromUnicode["\x00\x00\xFF\x0D"] = "\xA1\xDD"; +/* Convert Unicode PARALLEL TO to JIS X 0208 DOUBLE VERTICAL LINE */ +$fromUnicode["\x00\x00\x22\x25"] = "\xA1\xC2"; + +/* Unicode 0x007E (tilde) can be represented in two different ways in EUC-JP + * When converting Unicode to EUC-JP, use the simpler representation */ +$fromUnicode["\x00\x00\x00\x7E"] = "\x7E"; +/* Likewise with 0x005C */ +$fromUnicode["\x00\x00\x00\x5C"] = "\x5C"; + +findInvalidChars($validChars, $invalidChars, $truncated, array_fill_keys(range(0xA1, 0xFE), 2) + array(0x8E => 2, 0x8F => 3)); + +/* In the JIS X 0212 character set, kuten code 0x2237 (EUC-JP 0x8FA2B7) + * is an ordinary tilde character + * This mapping is not reversible, because ASCII 0x7E also represents + * the same character */ +unset($validChars["\x8F\xA2\xB7"]); + +testAllValidChars($validChars, 'EUC-JP', 'UTF-32BE'); +echo "Encoding verification and conversion work for all valid characters\n"; + +testAllInvalidChars($invalidChars, $validChars, 'EUC-JP', 'UTF-32BE', "\x00\x00\x00%"); +testTruncatedChars($truncated, 'EUC-JP', 'UTF-32BE', "\x00\x00\x00%"); +echo "Encoding verification and conversion work for all invalid characters\n"; + +testValidString("\x8F\xA2\xB7", "\x00\x00\x00~", 'EUC-JP', 'UTF-32BE', false); +echo "Irreversible mapping of 0x8FA2B7 follows JIS X 0212 correctly\n"; + +testAllValidChars($fromUnicode, 'UTF-32BE', 'EUC-JP', false); +echo "Unicode -> EUC-JP conversion works on all valid characters\n"; + +$invalidChars = array(); +for ($cp = 0; $cp <= 0xFFFF; $cp++) { + $char = pack('N', $cp); + if (!isset($fromUnicode[$char])) + $invalidChars[$char] = true; +} +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-32BE', 'EUC-JP', '%'); +echo "Unicode -> EUC-JP conversion works on all invalid characters\n"; +?> +--EXPECT-- +Encoding verification and conversion work for all valid characters +Encoding verification and conversion work for all invalid characters +Irreversible mapping of 0x8FA2B7 follows JIS X 0212 correctly +Unicode -> EUC-JP conversion works on all valid characters +Unicode -> EUC-JP conversion works on all invalid characters diff --git a/ext/mbstring/tests/illformed_utf_sequences.phpt b/ext/mbstring/tests/illformed_utf_sequences.phpt index 3b7d431a0e..8f3b97e8ec 100644 --- a/ext/mbstring/tests/illformed_utf_sequences.phpt +++ b/ext/mbstring/tests/illformed_utf_sequences.phpt @@ -4,12 +4,9 @@ Unicode standard conformance test (ill-formed UTF sequences.) <?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> --FILE-- <?php -function chk_enc($str, $n, $enc = "UTF-8", $with_bom = false) { +function chk_enc($str, $n, $enc = "UTF-8") { $src = bin2hex(mb_convert_encoding($str, "UCS-4BE", $enc)); $dst = str_repeat("0000fffd", $n); - if ($with_bom) { - $dst = "0000feff" . $dst; - } if ($dst == $src) { return false; } else { @@ -129,7 +126,7 @@ $out = ''; $cnt = 0; for ($i = 0xd7ff; $i <= 0xe000; ++$i) { $s = chk_enc("\x00\x00\xfe\xff". pack('C4', $i >> 24, ($i >> 16) & 0xff, ($i >> 8) & 0xff, $i & 0xff), - 1, "UTF-32", true); + 1, "UTF-32"); if ($s === false) { $cnt++; } else { @@ -137,13 +134,13 @@ for ($i = 0xd7ff; $i <= 0xe000; ++$i) { } } var_dump($cnt); -var_dump(str_replace("0000feff","",$out)); +var_dump($out); $out = ''; $cnt = 0; for ($i = 0xd7ff; $i <= 0xe000; ++$i) { $s = chk_enc("\xff\xfe\x00\x00". pack('C4', $i & 0xff, ($i >> 8) & 0xff, ($i >> 16) & 0xff, ($i >> 24) & 0xff), - 1, "UTF-32", true); + 1, "UTF-32"); if ($s === false) { $cnt++; } else { @@ -151,7 +148,7 @@ for ($i = 0xd7ff; $i <= 0xe000; ++$i) { } } var_dump($cnt); -var_dump(str_replace("0000feff","",$out)); +var_dump($out); ?> --EXPECT-- @@ -199,10 +196,10 @@ bool(false) string(8) "0010ffff" bool(false) string(8) "0010ffff" -string(16) "0000feff0000fffd" -string(16) "0000feff0010ffff" -string(16) "0000feff0000fffd" -string(16) "0000feff0010ffff" +string(8) "0000fffd" +string(8) "0010ffff" +string(8) "0000fffd" +string(8) "0010ffff" UTF-32 and surrogates area int(2048) string(16) "0000d7ff0000e000" diff --git a/ext/mbstring/tests/iso8859_encodings.phpt b/ext/mbstring/tests/iso8859_encodings.phpt new file mode 100644 index 0000000000..bbc70dfe3d --- /dev/null +++ b/ext/mbstring/tests/iso8859_encodings.phpt @@ -0,0 +1,46 @@ +--TEST-- +Exhaustive test of verification and conversion of ISO-8859-X text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); + +for ($n = 1; $n <= 16; $n++) { + if ($n == 11 || $n == 12) + continue; + testEncodingFromUTF16ConversionTable(__DIR__ . "/data/8859-$n.txt", "ISO-8859-{$n}"); +} +?> +--EXPECT-- +Tested ISO-8859-1 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-1 +Tested ISO-8859-2 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-2 +Tested ISO-8859-3 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-3 +Tested ISO-8859-4 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-4 +Tested ISO-8859-5 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-5 +Tested ISO-8859-6 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-6 +Tested ISO-8859-7 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-7 +Tested ISO-8859-8 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-8 +Tested ISO-8859-9 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-9 +Tested ISO-8859-10 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-10 +Tested ISO-8859-13 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-13 +Tested ISO-8859-14 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-14 +Tested ISO-8859-15 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-15 +Tested ISO-8859-16 -> UTF-16BE +Tested UTF-16BE -> ISO-8859-16 diff --git a/ext/mbstring/tests/koi8r_encoding.phpt b/ext/mbstring/tests/koi8r_encoding.phpt new file mode 100644 index 0000000000..368de514e2 --- /dev/null +++ b/ext/mbstring/tests/koi8r_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of KOI8-R text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/KOI8-R.txt', 'KOI8-R'); +?> +--EXPECT-- +Tested KOI8-R -> UTF-16BE +Tested UTF-16BE -> KOI8-R diff --git a/ext/mbstring/tests/koi8u_encoding.phpt b/ext/mbstring/tests/koi8u_encoding.phpt new file mode 100644 index 0000000000..499009225c --- /dev/null +++ b/ext/mbstring/tests/koi8u_encoding.phpt @@ -0,0 +1,15 @@ +--TEST-- +Exhaustive test of verification and conversion of KOI8-U text +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +include('encoding_tests.inc'); +testEncodingFromUTF16ConversionTable(__DIR__ . '/data/KOI8-U.txt', 'KOI8-U'); +?> +--EXPECT-- +Tested KOI8-U -> UTF-16BE +Tested UTF-16BE -> KOI8-U diff --git a/ext/mbstring/tests/mb_convert_encoding.phpt b/ext/mbstring/tests/mb_convert_encoding.phpt index 1f39d21b15..5ea4440049 100644 --- a/ext/mbstring/tests/mb_convert_encoding.phpt +++ b/ext/mbstring/tests/mb_convert_encoding.phpt @@ -20,11 +20,11 @@ $euc_jp = 'ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£'; // Note: For some reason it complains, results are different. Not researched. echo "== BASIC TEST ==\n"; $s = $sjis; -$s = mb_convert_encoding($s, 'EUC-JP', 'SJIS'); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'SJIS')); print("EUC-JP: $s\n"); // EUC-JP $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', 'JIS'); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'JIS')); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -41,7 +41,7 @@ echo "== STRING ENCODING LIST ==\n"; $a = 'JIS,UTF-8,EUC-JP,SJIS'; $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', $a); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', $a)); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -58,7 +58,7 @@ echo "== ARRAY ENCODING LIST ==\n"; $a = array(0=>'JIS', 1=>'UTF-8', 2=>'EUC-JP', 3=>'SJIS'); $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', $a); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', $a)); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -74,7 +74,7 @@ print("JIS: ".base64_encode($s)."\n"); // JIS echo "== DETECT ORDER ==\n"; $s = $jis; -$s = mb_convert_encoding($s, 'EUC-JP', 'auto'); +$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'auto')); print("EUC-JP: $s\n"); // EUC-JP $s = $euc_jp; @@ -86,18 +86,18 @@ $s = mb_convert_encoding($s, 'JIS', 'auto'); print("JIS: ".base64_encode($s)."\n"); // JIS -// Invalid(?) Parameters +// Invalid Parameters echo "== INVALID PARAMETER ==\n"; $s = mb_convert_encoding(1234, 'EUC-JP'); -print("INT: $s\n"); // EUC-JP +print("INT: $s\n"); $s = mb_convert_encoding('', 'EUC-JP'); print("EUC-JP: $s\n"); // SJIS $s = $euc_jp; try { - var_dump( mb_convert_encoding($s, 'BAD') ); + var_dump(mb_convert_encoding($s, 'BAD')); } catch (\ValueError $e) { echo $e->getMessage() . \PHP_EOL; } @@ -105,20 +105,20 @@ try { ?> --EXPECT-- == BASIC TEST == -EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ -EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == STRING ENCODING LIST == -EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == ARRAY ENCODING LIST == -EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == DETECT ORDER == -EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3 SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== == INVALID PARAMETER == diff --git a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt index b3c8ba10bb..45efe28766 100644 --- a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt +++ b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt @@ -1,5 +1,7 @@ --TEST-- mb_convert_encoding() when encoding detection fails +--INI-- +mbstring.strict_detection=1 --FILE-- <?php diff --git a/ext/mbstring/tests/mb_detect_encoding.phpt b/ext/mbstring/tests/mb_detect_encoding.phpt index 71c44c1642..b3db5f8825 100644 --- a/ext/mbstring/tests/mb_detect_encoding.phpt +++ b/ext/mbstring/tests/mb_detect_encoding.phpt @@ -41,7 +41,6 @@ echo "== ARRAY ENCODING LIST ==\n"; $a = array(0=>'UTF-8',1=>'EUC-JP', 2=>'SJIS', 3=>'JIS'); -// Note: Due to detect order, detected as UTF-8 $s = $jis; $s = mb_detect_encoding($s, $a); print("JIS: $s\n"); @@ -98,7 +97,7 @@ JIS: JIS EUC-JP: EUC-JP EUC-JP: EUC-JP == ARRAY ENCODING LIST == -JIS: UTF-8 +JIS: JIS EUC-JP: EUC-JP SJIS: SJIS == DETECT ORDER == diff --git a/ext/mbstring/tests/mb_internal_encoding_variation2.phpt b/ext/mbstring/tests/mb_internal_encoding_variation2.phpt index df38a9876b..ccf06802ba 100644 --- a/ext/mbstring/tests/mb_internal_encoding_variation2.phpt +++ b/ext/mbstring/tests/mb_internal_encoding_variation2.phpt @@ -50,10 +50,6 @@ $encoding = array('UCS-4', /*1*/ 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', /*35*/ - 'byte2be', - 'byte2le', - 'byte4be', - 'byte4le', 'BASE64', /*40*/ 'HTML-ENTITIES', '7bit', @@ -263,104 +259,84 @@ string(11) "ISO-8859-15" -- Iteration 36 -- string(11) "ISO-8859-15" bool(true) -string(7) "byte2be" - --- Iteration 37 -- -string(7) "byte2be" -bool(true) -string(7) "byte2le" - --- Iteration 38 -- -string(7) "byte2le" -bool(true) -string(7) "byte4be" - --- Iteration 39 -- -string(7) "byte4be" -bool(true) -string(7) "byte4le" - --- Iteration 40 -- -string(7) "byte4le" -bool(true) string(6) "BASE64" --- Iteration 41 -- +-- Iteration 37 -- string(6) "BASE64" bool(true) string(13) "HTML-ENTITIES" --- Iteration 42 -- +-- Iteration 38 -- string(13) "HTML-ENTITIES" bool(true) string(4) "7bit" --- Iteration 43 -- +-- Iteration 39 -- string(4) "7bit" bool(true) string(4) "8bit" --- Iteration 44 -- +-- Iteration 40 -- string(4) "8bit" bool(true) string(6) "EUC-CN" --- Iteration 45 -- +-- Iteration 41 -- string(6) "EUC-CN" bool(true) string(5) "CP936" --- Iteration 46 -- +-- Iteration 42 -- string(5) "CP936" bool(true) string(2) "HZ" --- Iteration 47 -- +-- Iteration 43 -- string(2) "HZ" bool(true) string(6) "EUC-TW" --- Iteration 48 -- +-- Iteration 44 -- string(6) "EUC-TW" bool(true) string(5) "CP950" --- Iteration 49 -- +-- Iteration 45 -- string(5) "CP950" bool(true) string(5) "BIG-5" --- Iteration 50 -- +-- Iteration 46 -- string(5) "BIG-5" bool(true) string(6) "EUC-KR" --- Iteration 51 -- +-- Iteration 47 -- string(6) "EUC-KR" bool(true) string(3) "UHC" --- Iteration 52 -- +-- Iteration 48 -- string(3) "UHC" bool(true) string(11) "ISO-2022-KR" --- Iteration 53 -- +-- Iteration 49 -- string(11) "ISO-2022-KR" bool(true) string(12) "Windows-1251" --- Iteration 54 -- +-- Iteration 50 -- string(12) "Windows-1251" bool(true) string(12) "Windows-1252" --- Iteration 55 -- +-- Iteration 51 -- string(12) "Windows-1252" bool(true) string(5) "CP866" --- Iteration 56 -- +-- Iteration 52 -- string(5) "CP866" bool(true) string(6) "KOI8-R" diff --git a/ext/mbstring/tests/sjis2004_encoding.phpt b/ext/mbstring/tests/sjis2004_encoding.phpt new file mode 100644 index 0000000000..cf9ef7a91a --- /dev/null +++ b/ext/mbstring/tests/sjis2004_encoding.phpt @@ -0,0 +1,62 @@ +--TEST-- +Exhaustive test of SJIS-2004 encoding verification and conversion +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +srand(101); /* Make results consistent */ +include('encoding_tests.inc'); +mb_substitute_character(0x25); // '%' + +/* Read in the table of all characters in SJIS-2004 */ +$validChars = array(); /* SJIS-2004 string -> UTF-32BE string */ +$fromUnicode = array(); /* UTF-16BE -> SJIS-2004 */ +$fp = fopen(__DIR__ . '/data/SJIS-2004.txt', 'r+'); +while ($line = fgets($fp, 256)) { + if ($line[0] == '#') + continue; + + $codepoint2 = null; + if (sscanf($line, "0x%x\tU+%x+%x", $bytes, $codepoint1, $codepoint2) >= 2) { + $sjis = ($bytes < 256) ? chr($bytes) : pack('n', $bytes); + if ($codepoint2) { + $validChars[$sjis] = pack('NN', $codepoint1, $codepoint2); + } else { + /* Two input byte sequences can translate to either a 'halfwidth' or a + * 'fullwidth' version of a character; our implementation of SJIS-2004 + * translates them to the fullwidth versions */ + if (preg_match('/Fullwidth: U\+([0-9A-F]+)/', $line, $match)) + $codepoint1 = hexdec($match[1]); + $validChars[$sjis] = pack('N', $codepoint1); + if ($codepoint1 <= 0xFFFF) + $fromUnicode[pack('n', $codepoint1)] = $sjis; + } + } +} +$fromUnicode["\x00\x7E"] = "\x7E"; /* Not reversible; SJIS 0x7E -> U+203E */ +$fromUnicode["\x00\x5C"] = "\x5C"; /* Not reversible; SJIS 0x5C -> U+00A5 */ + +testAllValidChars($validChars, 'SJIS-2004', 'UTF-32BE'); +echo "SJIS-2004 verification and conversion works for all valid characters\n"; + +findInvalidChars($validChars, $invalidChars, $truncated, + array_fill_keys(range(0x81, 0x9F), 2) + array_fill_keys(range(0xE0, 0xFC), 2)); +testAllInvalidChars($invalidChars, $validChars, 'SJIS-2004', 'UTF-32BE', "\x00\x00\x00%"); +testTruncatedChars($truncated, 'SJIS-2004', 'UTF-32BE', "\x00\x00\x00%"); +echo "SJIS-2004 verification and conversion rejects all invalid characters\n"; + +testAllValidChars($fromUnicode, 'UTF-16BE', 'SJIS-2004', false); +echo "Unicode -> SJIS-2004 conversion works on all valid characters\n"; + +findInvalidChars($fromUnicode, $invalidChars, $unused, array_fill_keys(range(0, 0xFF), 2)); +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-16BE', 'SJIS-2004', '%'); +echo "Unicode -> SJIS-2004 conversion works on all invalid characters\n"; +?> +--EXPECT-- +SJIS-2004 verification and conversion works for all valid characters +SJIS-2004 verification and conversion rejects all invalid characters +Unicode -> SJIS-2004 conversion works on all valid characters +Unicode -> SJIS-2004 conversion works on all invalid characters diff --git a/ext/mbstring/tests/sjis_encoding.phpt b/ext/mbstring/tests/sjis_encoding.phpt new file mode 100644 index 0000000000..a75ce85a4f --- /dev/null +++ b/ext/mbstring/tests/sjis_encoding.phpt @@ -0,0 +1,65 @@ +--TEST-- +Exhaustive test of Shift-JIS encoding verification and conversion +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +srand(999); /* Make results consistent */ +include('encoding_tests.inc'); +mb_substitute_character(0x25); // '%' + +/* Read in the table of all characters in Shift-JIS */ +readConversionTable(__DIR__ . '/data/SHIFTJIS.txt', $validChars, $fromUnicode); + +for ($i = 0; $i < 0x20; $i++) { + $validChars[chr($i)] = "\x00" . chr($i); + $fromUnicode["\x00" . chr($i)] = chr($i); +} + +/* DEL character */ +$validChars["\x7F"] = "\x00\x7F"; +$fromUnicode["\x00\x7F"] = "\x7F"; +/* Although Shift-JIS uses 0x7E for an overline, we will map Unicode 0x7E + * (tilde) to Shift-JIS 0x7E (as iconv does) */ +$fromUnicode["\x00\x7E"] = "\x7E"; +/* Use fullwidth reverse solidus, not (halfwidth) backslash (0x5C) */ +$validChars["\x81\x5F"] = "\xFF\x3C"; +$fromUnicode["\xFF\x3C"] = "\x81\x5F"; +/* Unicode has both halfwidth and fullwidth NOT SIGN; convert both of them + * to JIS X 0208 NOT SIGN */ +$fromUnicode["\xFF\xE2"] = "\x81\xCA"; +/* Likewise for fullwidth and halfwidth POUND SIGN */ +$fromUnicode["\xFF\xE1"] = "\x81\x92"; +/* Likewise for fullwidth and halfwidth CENT SIGN */ +$fromUnicode["\xFF\xE0"] = "\x81\x91"; +/* Convert Unicode FULLWIDTH TILDE to JIS X 0208 WAVE DASH */ +$fromUnicode["\xFF\x5E"] = "\x81\x60"; +/* Convert Unicode FULLWIDTH HYPHEN-MINUS to JIS X 0208 MINUS SIGN */ +$fromUnicode["\xFF\x0D"] = "\x81\x7C"; +/* Convert Unicode PARALLEL TO to JIS X 0208 DOUBLE VERTICAL LINE */ +$fromUnicode["\x22\x25"] = "\x81\x61"; + +testAllValidChars($validChars, 'Shift-JIS', 'UTF-16BE'); +echo "SJIS verification and conversion works on all valid characters\n"; + +findInvalidChars($validChars, $invalidChars, $truncated, + array_fill_keys(range(0x81, 0x9F), 2) + array_fill_keys(range(0xE0, 0xEF), 2)); +testAllInvalidChars($invalidChars, $validChars, 'Shift-JIS', 'UTF-16BE', "\x00%"); +testTruncatedChars($truncated, 'Shift-JIS', 'UTF-16BE', "\x00%"); +echo "SJIS verification and conversion works on all invalid characters\n"; + +testAllValidChars($fromUnicode, 'UTF-16BE', 'Shift-JIS', false); +echo "Unicode -> SJIS conversion works on all valid characters\n"; + +findInvalidChars($fromUnicode, $invalidChars, $unused, array_fill_keys(range(0, 0xFF), 2)); +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-16BE', 'Shift-JIS', '%'); +echo "Unicode -> SJIS conversion works on all invalid characters\n"; +?> +--EXPECT-- +SJIS verification and conversion works on all valid characters +SJIS verification and conversion works on all invalid characters +Unicode -> SJIS conversion works on all valid characters +Unicode -> SJIS conversion works on all invalid characters diff --git a/ext/mbstring/tests/sjismac_encoding.phpt b/ext/mbstring/tests/sjismac_encoding.phpt new file mode 100644 index 0000000000..2dedfa7970 --- /dev/null +++ b/ext/mbstring/tests/sjismac_encoding.phpt @@ -0,0 +1,85 @@ +--TEST-- +Exhaustive test of MacJapanese encoding verification and conversion +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +?> +--FILE-- +<?php +srand(300); /* Make results consistent */ +include('encoding_tests.inc'); +mb_substitute_character(0x25); // '%' + +/* Read in the table of all characters in MacJapanese */ +$validChars = array(); /* MacJapanese string -> UTF-32BE string */ +$fromUnicode = array(); /* UTF-16BE -> MacJapanese */ +$fp = fopen(__DIR__ . '/data/MacJapanese-SJIS.txt', 'r+'); +while ($line = fgets($fp, 256)) { + if ($line[0] == '#') + continue; + + $cp1 = $cp2 = $cp3 = $cp4 = $cp5 = null; + if (sscanf($line, "0x%x\t0x%x+0x%x+0x%x+0x%x+0x%x", $bytes, $cp1, $cp2, $cp3, $cp4, $cp5) >= 2) { + if ($bytes < 256) { + $macJap = chr($bytes); + } else { + $macJap = pack('n', $bytes); + } + + if ($cp5) { + $validChars[$macJap] = pack('NNNNN', $cp1, $cp2, $cp3, $cp4, $cp5); + $fromUnicode[pack('nnnnn', $cp1, $cp2, $cp3, $cp4, $cp5)] = $macJap; + } else if ($cp4) { + $validChars[$macJap] = pack('NNNN', $cp1, $cp2, $cp3, $cp4); + $fromUnicode[pack('nnnn', $cp1, $cp2, $cp3, $cp4)] = $macJap; + } else if ($cp3) { + $validChars[$macJap] = pack('NNN', $cp1, $cp2, $cp3); + $fromUnicode[pack('nnn', $cp1, $cp2, $cp3)] = $macJap; + } else if ($cp2) { + $validChars[$macJap] = pack('NN', $cp1, $cp2); + $fromUnicode[pack('nn', $cp1, $cp2)] = $macJap; + } else { + $validChars[$macJap] = pack('N', $cp1); + $fromUnicode[pack('n', $cp1)] = $macJap; + } + } +} +/* Although not included in the table, 0x0-0x1F and 0x7F are valid; + * these are 'control characters' */ +for ($i = 0; $i < 0x20; $i++) { + $validChars[chr($i)] = pack('N', $i); + $fromUnicode[pack('n', $i)] = chr($i); +} +$validChars["\x7F"] = pack('N', 0x7F); +$fromUnicode["\x00\x7F"] = "\x7F"; + +/* While Shift-JIS 0x815C normally corresponds to U+2015 (HORIZONTAL BAR), + * for MacJapanese we convert 0x815C to U+2014 (EM DASH) + * (See recommendations in JAPANESE.txt from the Unicode Consortium, under + * 'Unicode mapping issues', point 3) + * However, when converting Unicode -> MacJapanese, we accept both U+2014 + * and U+2015 */ +$fromUnicode["\x20\x15"] = "\x81\x5C"; + +testAllValidChars($validChars, 'SJIS-mac', 'UTF-32BE'); +echo "MacJapanese verification and conversion works on all valid characters\n"; + +findInvalidChars($validChars, $invalidChars, $truncated, + array_fill_keys(range(0x81, 0x9F), 2) + array_fill_keys(range(0xE0, 0xED), 2)); +testAllInvalidChars($invalidChars, $validChars, 'SJIS-mac', 'UTF-32BE', "\x00\x00\x00%"); +testTruncatedChars($truncated, 'SJIS-mac', 'UTF-32BE', "\x00\x00\x00%"); +echo "MacJapanese verification and conversion rejects all invalid characters\n"; + +testAllValidChars($fromUnicode, 'UTF-16BE', 'SJIS-mac', false); +echo "Unicode -> SJIS-mac conversion works on all valid characters\n"; + +findInvalidChars($fromUnicode, $invalidChars, $unused, array_fill_keys(range(0, 0xFF), 2)); +convertAllInvalidChars($invalidChars, $fromUnicode, 'UTF-16BE', 'SJIS-mac', '%'); +echo "Unicode -> SJIS-mac conversion works on all invalid characters\n"; +?> +--EXPECT-- +MacJapanese verification and conversion works on all valid characters +MacJapanese verification and conversion rejects all invalid characters +Unicode -> SJIS-mac conversion works on all valid characters +Unicode -> SJIS-mac conversion works on all invalid characters diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 10f20eede8..55da87fdf0 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -109,7 +109,7 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s) } /* Position at the first row */ set->data_cursor = set->data; - } else if (result->stored_data->type == MYSQLND_BUFFERED_TYPE_ZVAL) { + } else if (result->stored_data->type == MYSQLND_BUFFERED_TYPE_C) { /*TODO*/ } diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 7eee9819ce..c8ee9b9da6 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -802,7 +802,7 @@ static inline void kill_all_lockers(struct flock *mem_usage_check) /* errno is not ESRCH or we ran out of tries to kill the locker */ ZCSG(force_restart_time) = time(NULL); /* restore forced restart request */ /* cannot kill the locker, bail out with error */ - zend_accel_error(ACCEL_LOG_ERROR, "Cannot kill process %d!", mem_usage_check->l_pid); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Cannot kill process %d!", mem_usage_check->l_pid); } mem_usage_check->l_type = F_WRLCK; @@ -2639,7 +2639,7 @@ static int zend_accel_init_shm(void) accel_shared_globals = zend_shared_alloc(sizeof(zend_accel_shared_globals) + sizeof(uint32_t)); } if (!accel_shared_globals) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); zend_shared_alloc_unlock(); return FAILURE; } @@ -2981,7 +2981,7 @@ static zend_result accel_post_startup(void) page_size = getpagesize(); # endif if (!page_size || (page_size & (page_size - 1))) { - zend_accel_error(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can't get page size."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can't get page size."); abort(); } jit_size = JIT_G(buffer_size); @@ -3001,7 +3001,7 @@ static zend_result accel_post_startup(void) break; case ALLOC_FAILURE: accel_startup_ok = 0; - zend_accel_error(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - probably not enough shared memory."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - probably not enough shared memory."); return SUCCESS; case SUCCESSFULLY_REATTACHED: #if defined(HAVE_JIT) && !defined(ZEND_WIN32) @@ -3014,7 +3014,7 @@ static zend_result accel_post_startup(void) break; case FAILED_REATTACHED: accel_startup_ok = 0; - zend_accel_error(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can not reattach to exiting shared memory."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Failure to initialize shared memory structures - can not reattach to exiting shared memory."); return SUCCESS; break; #if ENABLE_FILE_CACHE_FALLBACK @@ -3054,7 +3054,7 @@ static zend_result accel_post_startup(void) SHM_PROTECT(); } else if (!ZCG(accel_directives).file_cache) { accel_startup_ok = 0; - zend_accel_error(ACCEL_LOG_FATAL, "opcache.file_cache_only is set without a proper setting of opcache.file_cache"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "opcache.file_cache_only is set without a proper setting of opcache.file_cache"); return SUCCESS; } else { accel_shared_globals = calloc(1, sizeof(zend_accel_shared_globals)); @@ -4216,7 +4216,7 @@ static zend_persistent_script* preload_script_in_shared_memory(zend_persistent_s uint32_t checkpoint; if (zend_accel_hash_is_full(&ZCSG(hash))) { - zend_accel_error(ACCEL_LOG_FATAL, "Not enough entries in hash table for preloading. Consider increasing the value for the opcache.max_accelerated_files directive in php.ini."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Not enough entries in hash table for preloading. Consider increasing the value for the opcache.max_accelerated_files directive in php.ini."); return NULL; } @@ -4268,7 +4268,7 @@ static zend_persistent_script* preload_script_in_shared_memory(zend_persistent_s } #endif if (!ZCG(mem)) { - zend_accel_error(ACCEL_LOG_FATAL, "Not enough shared memory for preloading. Consider increasing the value for the opcache.memory_consumption directive in php.ini."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Not enough shared memory for preloading. Consider increasing the value for the opcache.memory_consumption directive in php.ini."); return NULL; } @@ -4590,7 +4590,7 @@ static int accel_preload(const char *config, zend_bool in_child) CG(map_ptr_last) = orig_map_ptr_last; if (EG(full_tables_cleanup)) { - zend_accel_error(ACCEL_LOG_FATAL, "Preloading is not compatible with dl() function."); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading is not compatible with dl() function."); ret = FAILURE; goto finish; } @@ -4673,7 +4673,7 @@ static int accel_preload(const char *config, zend_bool in_child) zend_hash_sort_ex(&script->script.class_table, preload_sort_classes, NULL, 0); if (preload_optimize(script) != SUCCESS) { - zend_accel_error(ACCEL_LOG_FATAL, "Optimization error during preloading!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Optimization error during preloading!"); return FAILURE; } @@ -4772,7 +4772,7 @@ static int accel_finish_startup(void) if (ZCG(accel_directives).preload && *ZCG(accel_directives).preload) { #ifdef ZEND_WIN32 - zend_accel_error(ACCEL_LOG_ERROR, "Preloading is not supported on Windows"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Preloading is not supported on Windows"); return FAILURE; #else int in_child = 0; @@ -4815,21 +4815,21 @@ static int accel_finish_startup(void) if (!ZCG(accel_directives).preload_user || !*ZCG(accel_directives).preload_user) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "\"opcache.preload_user\" has not been defined"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "\"opcache.preload_user\" has not been defined"); return FAILURE; } pw = getpwnam(ZCG(accel_directives).preload_user); if (pw == NULL) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "Preloading failed to getpwnam(\"%s\")", ZCG(accel_directives).preload_user); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading failed to getpwnam(\"%s\")", ZCG(accel_directives).preload_user); return FAILURE; } pid = fork(); if (pid == -1) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "Preloading failed to fork()"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading failed to fork()"); return FAILURE; } else if (pid == 0) { /* children */ if (setgid(pw->pw_gid) < 0) { @@ -4850,7 +4850,7 @@ static int accel_finish_startup(void) if (waitpid(pid, &status, 0) < 0) { zend_shared_alloc_unlock(); - zend_accel_error(ACCEL_LOG_FATAL, "Preloading failed to waitpid(%d)", pid); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Preloading failed to waitpid(%d)", pid); return FAILURE; } diff --git a/ext/opcache/tests/bug65915.phpt b/ext/opcache/tests/bug65915.phpt index c616c4fb5f..b62dbd8ea7 100644 --- a/ext/opcache/tests/bug65915.phpt +++ b/ext/opcache/tests/bug65915.phpt @@ -5,7 +5,11 @@ opcache.enable=1 opcache.enable_cli=1 opcache.file_cache_only=0 --SKIPIF-- -<?php require_once('skipif.inc'); ?> +<?php +require_once('skipif.inc'); +// We don't invalidate the file after the second write. +if (getenv('SKIP_REPEAT')) die("skip Not repeatable"); +?> --FILE-- <?php $tmp = __DIR__ . "/bug65915.inc.php"; diff --git a/ext/opcache/tests/zzz_basic_logging.phpt b/ext/opcache/tests/zzz_basic_logging.phpt index bf04b50861..0fbf308a51 100644 --- a/ext/opcache/tests/zzz_basic_logging.phpt +++ b/ext/opcache/tests/zzz_basic_logging.phpt @@ -12,7 +12,11 @@ opcache.log_verbosity_level=4 opcache.huge_code_pages=0 opcache.preload= --SKIPIF-- -<?php require_once('skipif.inc'); ?> +<?php +require_once('skipif.inc'); +// Prints "Debug Restarting!" message on next request. +if (getenv('SKIP_REPEAT')) die("skip Not repeatable"); +?> --FILE-- <?php echo "Foo Bar\n"; diff --git a/ext/opcache/zend_accelerator_blacklist.c b/ext/opcache/zend_accelerator_blacklist.c index 9ae897b521..45ad0b2685 100644 --- a/ext/opcache/zend_accelerator_blacklist.c +++ b/ext/opcache/zend_accelerator_blacklist.c @@ -60,7 +60,7 @@ void zend_accel_blacklist_init(zend_blacklist *blacklist) blacklist->entries = (zend_blacklist_entry *) calloc(sizeof(zend_blacklist_entry), blacklist->size); if (!blacklist->entries) { - zend_accel_error(ACCEL_LOG_FATAL, "Blacklist initialization: no memory\n"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Blacklist initialization: no memory\n"); return; } blacklist->regexp_list = NULL; @@ -68,7 +68,7 @@ void zend_accel_blacklist_init(zend_blacklist *blacklist) static void blacklist_report_regexp_error(const char *pcre_error, int pcre_error_offset) { - zend_accel_error(ACCEL_LOG_ERROR, "Blacklist compilation failed (offset: %d), %s\n", pcre_error_offset, pcre_error); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Blacklist compilation failed (offset: %d), %s\n", pcre_error_offset, pcre_error); } static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) @@ -163,7 +163,7 @@ static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) if (*c || i == blacklist->pos - 1) { if (*c) { if (!backtrack) { - zend_accel_error(ACCEL_LOG_ERROR, "Too long blacklist entry\n"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Too long blacklist entry\n"); } p = backtrack; } else { @@ -173,7 +173,7 @@ static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) it = (zend_regexp_list*)malloc(sizeof(zend_regexp_list)); if (!it) { - zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed\n"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "malloc() failed\n"); return; } it->next = NULL; @@ -302,7 +302,7 @@ static void zend_accel_blacklist_loadone(zend_blacklist *blacklist, char *filena blacklist->entries[blacklist->pos].path_length = path_length; blacklist->entries[blacklist->pos].path = (char *)malloc(path_length + 1); if (!blacklist->entries[blacklist->pos].path) { - zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed\n"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "malloc() failed\n"); fclose(fp); return; } diff --git a/ext/opcache/zend_accelerator_debug.c b/ext/opcache/zend_accelerator_debug.c index f91c269975..a3db2a7215 100644 --- a/ext/opcache/zend_accelerator_debug.c +++ b/ext/opcache/zend_accelerator_debug.c @@ -28,9 +28,8 @@ #endif #include "ZendAccelerator.h" -void zend_accel_error(int type, const char *format, ...) +static void zend_accel_error_va_args(int type, const char *format, va_list args) { - va_list args; time_t timestamp; char *time_string; FILE * fLog = NULL; @@ -77,9 +76,7 @@ void zend_accel_error(int type, const char *format, ...) break; } - va_start(args, format); vfprintf(fLog, format, args); - va_end(args); fprintf(fLog, "\n"); fflush(fLog); @@ -98,3 +95,22 @@ void zend_accel_error(int type, const char *format, ...) } } + +void zend_accel_error(int type, const char *format, ...) +{ + va_list args; + va_start(args, format); + zend_accel_error_va_args(type, format, args); + va_end(args); +} + +ZEND_NORETURN void zend_accel_error_noreturn(int type, const char *format, ...) +{ + va_list args; + va_start(args, format); + ZEND_ASSERT(type == ACCEL_LOG_FATAL || type == ACCEL_LOG_ERROR); + zend_accel_error_va_args(type, format, args); + va_end(args); + /* Should never reach this. */ + abort(); +} diff --git a/ext/opcache/zend_accelerator_debug.h b/ext/opcache/zend_accelerator_debug.h index 234d0367de..61456096d1 100644 --- a/ext/opcache/zend_accelerator_debug.h +++ b/ext/opcache/zend_accelerator_debug.h @@ -29,5 +29,6 @@ #define ACCEL_LOG_DEBUG 4 void zend_accel_error(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); +ZEND_NORETURN void zend_accel_error_noreturn(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); #endif /* _ZEND_ACCELERATOR_DEBUG_H */ diff --git a/ext/opcache/zend_accelerator_hash.c b/ext/opcache/zend_accelerator_hash.c index 7cd9ef1ef4..b0293ae8f2 100644 --- a/ext/opcache/zend_accelerator_hash.c +++ b/ext/opcache/zend_accelerator_hash.c @@ -54,14 +54,14 @@ void zend_accel_hash_init(zend_accel_hash *accel_hash, uint32_t hash_size) /* set up hash pointers table */ accel_hash->hash_table = zend_shared_alloc(sizeof(zend_accel_hash_entry *)*accel_hash->max_num_entries); if (!accel_hash->hash_table) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return; } /* set up hash values table */ accel_hash->hash_entries = zend_shared_alloc(sizeof(zend_accel_hash_entry)*accel_hash->max_num_entries); if (!accel_hash->hash_entries) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return; } memset(accel_hash->hash_table, 0, sizeof(zend_accel_hash_entry *)*accel_hash->max_num_entries); diff --git a/ext/opcache/zend_shared_alloc.c b/ext/opcache/zend_shared_alloc.c index d32a70b7e8..f4cb4f55af 100644 --- a/ext/opcache/zend_shared_alloc.c +++ b/ext/opcache/zend_shared_alloc.c @@ -86,7 +86,7 @@ void zend_shared_alloc_create_lock(char *lockfile_path) fchmod(lock_file, 0666); if (lock_file == -1) { - zend_accel_error(ACCEL_LOG_FATAL, "Unable to create lock file: %s (%d)", strerror(errno), errno); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Unable to create lock file: %s (%d)", strerror(errno), errno); } val = fcntl(lock_file, F_GETFD, 0); val |= FD_CLOEXEC; @@ -98,7 +98,7 @@ void zend_shared_alloc_create_lock(char *lockfile_path) static void no_memory_bailout(size_t allocate_size, char *error) { - zend_accel_error(ACCEL_LOG_FATAL, "Unable to allocate shared memory segment of %zu bytes: %s: %s (%d)", allocate_size, error?error:"unknown", strerror(errno), errno ); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Unable to allocate shared memory segment of %zu bytes: %s: %s (%d)", allocate_size, error?error:"unknown", strerror(errno), errno ); } static void copy_shared_segments(void *to, void *from, int count, int size) @@ -231,14 +231,14 @@ int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size) p_tmp_shared_globals = (zend_smm_shared_globals *) zend_shared_alloc(sizeof(zend_smm_shared_globals)); if (!p_tmp_shared_globals) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } memset(p_tmp_shared_globals, 0, sizeof(zend_smm_shared_globals)); tmp_shared_segments = zend_shared_alloc(shared_segments_array_size + ZSMMG(shared_segments_count) * sizeof(void *)); if (!tmp_shared_segments) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } @@ -252,7 +252,7 @@ int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size) ZSMMG(shared_memory_state).positions = (int *)zend_shared_alloc(sizeof(int) * ZSMMG(shared_segments_count)); if (!ZSMMG(shared_memory_state).positions) { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } @@ -263,7 +263,7 @@ int zend_shared_alloc_startup(size_t requested_size, size_t reserved_size) ZSMMG(reserved) = (char*)ZSMMG(shared_segments)[i]->p + ZSMMG(shared_segments)[i]->end; ZSMMG(reserved_size) = reserved_size; } else { - zend_accel_error(ACCEL_LOG_FATAL, "Insufficient shared memory!"); + zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Insufficient shared memory!"); return ALLOC_FAILURE; } } @@ -340,7 +340,7 @@ void *zend_shared_alloc(size_t size) #if 1 if (!ZCG(locked)) { - zend_accel_error(ACCEL_LOG_ERROR, "Shared memory lock not obtained"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Shared memory lock not obtained"); } #endif if (block_size > ZSMMG(shared_free)) { /* No hope to find a big-enough block */ @@ -482,7 +482,7 @@ void zend_shared_alloc_lock(void) if (errno == EINTR) { continue; } - zend_accel_error(ACCEL_LOG_ERROR, "Cannot create lock - %s (%d)", strerror(errno), errno); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Cannot create lock - %s (%d)", strerror(errno), errno); } break; } @@ -508,7 +508,7 @@ void zend_shared_alloc_unlock(void) #ifndef ZEND_WIN32 if (fcntl(lock_file, F_SETLK, &mem_write_unlock) == -1) { - zend_accel_error(ACCEL_LOG_ERROR, "Cannot remove lock - %s (%d)", strerror(errno), errno); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Cannot remove lock - %s (%d)", strerror(errno), errno); } #ifdef ZTS tsrm_mutex_unlock(zts_lock); @@ -631,7 +631,7 @@ void zend_accel_shared_protect(int mode) for (i = 0; i < ZSMMG(shared_segments_count); i++) { DWORD oldProtect; if (!VirtualProtect(ZSMMG(shared_segments)[i]->p, ZSMMG(shared_segments)[i]->end, mode, &oldProtect)) { - zend_accel_error(ACCEL_LOG_ERROR, "Failed to protect memory"); + zend_accel_error_noreturn(ACCEL_LOG_ERROR, "Failed to protect memory"); } } #endif diff --git a/ext/openssl/config0.m4 b/ext/openssl/config0.m4 index 9df2469363..e08a76897a 100644 --- a/ext/openssl/config0.m4 +++ b/ext/openssl/config0.m4 @@ -1,7 +1,7 @@ PHP_ARG_WITH([openssl], [for OpenSSL support], [AS_HELP_STRING([--with-openssl], - [Include OpenSSL support (requires OpenSSL >= 1.0.1)])]) + [Include OpenSSL support (requires OpenSSL >= 1.0.2)])]) PHP_ARG_WITH([kerberos], [for Kerberos support], diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 18c822ed67..113d0c2ec4 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -1149,13 +1149,6 @@ PHP_MINIT_FUNCTION(openssl) OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); OpenSSL_add_all_algorithms(); - -#if !defined(OPENSSL_NO_AES) && defined(EVP_CIPH_CCM_MODE) && OPENSSL_VERSION_NUMBER < 0x100020000 - EVP_add_cipher(EVP_aes_128_ccm()); - EVP_add_cipher(EVP_aes_192_ccm()); - EVP_add_cipher(EVP_aes_256_ccm()); -#endif - SSL_load_error_strings(); #else OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL); @@ -3671,26 +3664,18 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req case OPENSSL_KEYTYPE_RSA: { RSA* rsaparam; -#if OPENSSL_VERSION_NUMBER < 0x10002000L - /* OpenSSL 1.0.2 deprecates RSA_generate_key */ - PHP_OPENSSL_RAND_ADD_TIME(); - rsaparam = (RSA*)RSA_generate_key(req->priv_key_bits, RSA_F4, NULL, NULL); -#else - { - BIGNUM *bne = (BIGNUM *)BN_new(); - if (BN_set_word(bne, RSA_F4) != 1) { - BN_free(bne); - php_error_docref(NULL, E_WARNING, "Failed setting exponent"); - return NULL; - } - rsaparam = RSA_new(); - PHP_OPENSSL_RAND_ADD_TIME(); - if (rsaparam == NULL || !RSA_generate_key_ex(rsaparam, req->priv_key_bits, bne, NULL)) { - php_openssl_store_errors(); - } + BIGNUM *bne = (BIGNUM *)BN_new(); + if (BN_set_word(bne, RSA_F4) != 1) { BN_free(bne); + php_error_docref(NULL, E_WARNING, "Failed setting exponent"); + return NULL; } -#endif + rsaparam = RSA_new(); + PHP_OPENSSL_RAND_ADD_TIME(); + if (rsaparam == NULL || !RSA_generate_key_ex(rsaparam, req->priv_key_bits, bne, NULL)) { + php_openssl_store_errors(); + } + BN_free(bne); if (rsaparam && EVP_PKEY_assign_RSA(req->priv_key, rsaparam)) { return_val = req->priv_key; } else { diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h index c674ead34b..838832388c 100644 --- a/ext/openssl/php_openssl.h +++ b/ext/openssl/php_openssl.h @@ -35,9 +35,7 @@ extern zend_module_entry openssl_module_entry; #endif #else /* OpenSSL version check */ -#if OPENSSL_VERSION_NUMBER < 0x10002000L -#define PHP_OPENSSL_API_VERSION 0x10001 -#elif OPENSSL_VERSION_NUMBER < 0x10100000L +#if OPENSSL_VERSION_NUMBER < 0x10100000L #define PHP_OPENSSL_API_VERSION 0x10002 #else #define PHP_OPENSSL_API_VERSION 0x10100 diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index feb9ee52c1..6fdbf1df16 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -33,11 +33,8 @@ #include <openssl/x509.h> #include <openssl/x509v3.h> #include <openssl/err.h> - -#if OPENSSL_VERSION_NUMBER >= 0x10002000L #include <openssl/bn.h> #include <openssl/dh.h> -#endif #ifdef PHP_WIN32 #include "win32/winutil.h" @@ -80,10 +77,8 @@ #ifndef OPENSSL_NO_TLSEXT #define HAVE_TLS_SNI 1 -#if OPENSSL_VERSION_NUMBER >= 0x10002000L #define HAVE_TLS_ALPN 1 #endif -#endif #if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) #define HAVE_SEC_LEVEL 1 @@ -1294,12 +1289,8 @@ static int php_openssl_set_server_ecdh_curve(php_stream *stream, SSL_CTX *ctx) / zvcurve = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", "ecdh_curve"); if (zvcurve == NULL) { -#if OPENSSL_VERSION_NUMBER >= 0x10002000L SSL_CTX_set_ecdh_auto(ctx, 1); return SUCCESS; -#else - curve_nid = NID_X9_62_prime256v1; -#endif } else { if (!try_convert_to_string(zvcurve)) { return FAILURE; diff --git a/ext/pcntl/tests/002.phpt b/ext/pcntl/tests/002.phpt index 68b2643092..254da86136 100644 --- a/ext/pcntl/tests/002.phpt +++ b/ext/pcntl/tests/002.phpt @@ -7,6 +7,7 @@ pcntl: pcntl_sigprocmask(), pcntl_sigwaitinfo(), pcntl_sigtimedwait() elseif (!function_exists('pcntl_sigwaitinfo') or !function_exists('pcntl_sigtimedwait')) die('skip required functionality is not available'); elseif (!defined('CLD_EXITED')) die('skip CLD_EXITED not defined'); elseif (getenv('SKIP_ASAN')) die('skip Fails intermittently under asan/msan'); + elseif (getenv("SKIP_REPEAT")) die("skip cannot be repeated"); ?> --FILE-- <?php diff --git a/ext/pcntl/tests/pcntl_unshare_01.phpt b/ext/pcntl/tests/pcntl_unshare_01.phpt index fcbf112e4d..6eb5a20bdd 100644 --- a/ext/pcntl/tests/pcntl_unshare_01.phpt +++ b/ext/pcntl/tests/pcntl_unshare_01.phpt @@ -9,6 +9,7 @@ if (!defined("CLONE_NEWUSER")) die("skip flag unavailable"); if (@pcntl_unshare(CLONE_NEWUSER) == false && pcntl_get_last_error() == PCNTL_EPERM) { die("skip Insufficient privileges to use CLONE_NEWUSER"); } +if (getenv("SKIP_REPEAT")) die("skip cannot be repeated"); ?> --FILE-- <?php diff --git a/ext/pcntl/tests/pcntl_unshare_02.phpt b/ext/pcntl/tests/pcntl_unshare_02.phpt index fdf07bc81c..3e90a3920c 100644 --- a/ext/pcntl/tests/pcntl_unshare_02.phpt +++ b/ext/pcntl/tests/pcntl_unshare_02.phpt @@ -15,6 +15,7 @@ if (posix_getuid() !== 0 && if (@pcntl_unshare(CLONE_NEWPID) == false && pcntl_get_last_error() == PCNTL_EPERM) { die("skip Insufficient privileges for CLONE_NEWPID"); } +if (getenv("SKIP_REPEAT")) die("skip cannot be repeated"); ?> --FILE-- <?php diff --git a/ext/pcntl/tests/pcntl_unshare_03.phpt b/ext/pcntl/tests/pcntl_unshare_03.phpt index f82f27b719..8e9bd793e6 100644 --- a/ext/pcntl/tests/pcntl_unshare_03.phpt +++ b/ext/pcntl/tests/pcntl_unshare_03.phpt @@ -15,6 +15,7 @@ if (@pcntl_unshare(CLONE_NEWNET) == false && pcntl_get_last_error() == PCNTL_EPE die("skip Insufficient privileges for CLONE_NEWPID"); } if (getenv("SKIP_ONLINE_TESTS")) die("skip online test"); +if (getenv("SKIP_REPEAT")) die("skip cannot be repeated"); ?> --FILE-- <?php diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 8917b9b0dc..00d20778e9 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1293,8 +1293,12 @@ static int dbh_compare(zval *object1, zval *object2) static HashTable *dbh_get_gc(zend_object *object, zval **gc_data, int *gc_count) { pdo_dbh_t *dbh = php_pdo_dbh_fetch_inner(object); - *gc_data = &dbh->def_stmt_ctor_args; - *gc_count = 1; + zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create(); + zend_get_gc_buffer_add_zval(gc_buffer, &dbh->def_stmt_ctor_args); + if (dbh->methods && dbh->methods->get_gc) { + dbh->methods->get_gc(dbh, gc_buffer); + } + zend_get_gc_buffer_use(gc_buffer, gc_data, gc_count); return zend_std_get_properties(object); } diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h index 960ddec4ef..974eb0bad0 100644 --- a/ext/pdo/php_pdo_driver.h +++ b/ext/pdo/php_pdo_driver.h @@ -286,6 +286,10 @@ typedef int (*pdo_dbh_check_liveness_func)(pdo_dbh_t *dbh); * scope */ typedef void (*pdo_dbh_request_shutdown)(pdo_dbh_t *dbh); +/* Called when the PDO handle is scanned for GC. Should populate the get_gc buffer + * with any zvals in the driver_data that would be freed if the handle is destroyed. */ +typedef void (*pdo_dbh_get_gc_func)(pdo_dbh_t *dbh, zend_get_gc_buffer *buffer); + /* for adding methods to the dbh or stmt objects pointer to a list of driver specific functions. The convention is to prefix the function names using the PDO driver name; this will @@ -316,6 +320,7 @@ struct pdo_dbh_methods { pdo_dbh_get_driver_methods_func get_driver_methods; pdo_dbh_request_shutdown persistent_shutdown; pdo_dbh_txn_func in_transaction; + pdo_dbh_get_gc_func get_gc; }; /* }}} */ diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c index 7f160a402f..e581642037 100644 --- a/ext/pdo_dblib/dblib_driver.c +++ b/ext/pdo_dblib/dblib_driver.c @@ -417,7 +417,8 @@ static const struct pdo_dbh_methods dblib_methods = { NULL, /* check liveness */ NULL, /* get driver methods */ NULL, /* request shutdown */ - NULL /* in transaction */ + NULL, /* in transaction */ + NULL /* get gc */ }; static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options) diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c index c27a9e2ed5..c299907f0f 100644 --- a/ext/pdo_firebird/firebird_driver.c +++ b/ext/pdo_firebird/firebird_driver.c @@ -1005,7 +1005,11 @@ static const struct pdo_dbh_methods firebird_methods = { /* {{{ */ NULL, /* last_id not supported */ pdo_firebird_fetch_error_func, firebird_handle_get_attribute, - NULL /* check_liveness */ + NULL, /* check_liveness */ + NULL, /* get driver methods */ + NULL, /* request shutdown */ + NULL, /* in transaction */ + NULL /* get gc */ }; /* }}} */ diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index 641a9add1a..a83b12b872 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -577,7 +577,8 @@ static const struct pdo_dbh_methods mysql_methods = { pdo_mysql_check_liveness, NULL, pdo_mysql_request_shutdown, - pdo_mysql_in_transaction + pdo_mysql_in_transaction, + NULL /* get_gc */ }; /* }}} */ diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c index 096a26575e..2c65fc973b 100644 --- a/ext/pdo_oci/oci_driver.c +++ b/ext/pdo_oci/oci_driver.c @@ -705,9 +705,10 @@ static const struct pdo_dbh_methods oci_methods = { pdo_oci_fetch_error_func, oci_handle_get_attribute, pdo_oci_check_liveness, /* check_liveness */ - NULL, /* get_driver_methods */ - NULL, - NULL + NULL, /* get_driver_methods */ + NULL, /* request_shutdown */ + NULL, /* in_transaction */ + NULL /* get_gc */ }; static int pdo_oci_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c index 9a254553d5..81e4915da5 100644 --- a/ext/pdo_odbc/odbc_driver.c +++ b/ext/pdo_odbc/odbc_driver.c @@ -384,7 +384,11 @@ static const struct pdo_dbh_methods odbc_methods = { NULL, /* last id */ pdo_odbc_fetch_error_func, odbc_handle_get_attr, /* get attr */ - NULL, /* check_liveness */ + NULL, /* check_liveness */ + NULL, /* get_driver_methods */ + NULL, /* request_shutdown */ + NULL, /* in_transaction */ + NULL /* get_gc */ }; static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index d800d65a2d..37680b8efa 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -1179,6 +1179,7 @@ static const struct pdo_dbh_methods pgsql_methods = { pdo_pgsql_get_driver_methods, /* get_driver_methods */ NULL, pgsql_handle_in_transaction, + NULL /* get_gc */ }; static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c index 26fa1c00eb..a8a96c7a13 100644 --- a/ext/pdo_sqlite/sqlite_driver.c +++ b/ext/pdo_sqlite/sqlite_driver.c @@ -695,6 +695,25 @@ static void pdo_sqlite_request_shutdown(pdo_dbh_t *dbh) } } +static void pdo_sqlite_get_gc(pdo_dbh_t *dbh, zend_get_gc_buffer *gc_buffer) +{ + pdo_sqlite_db_handle *H = dbh->driver_data; + + struct pdo_sqlite_func *func = H->funcs; + while (func) { + zend_get_gc_buffer_add_zval(gc_buffer, &func->func); + zend_get_gc_buffer_add_zval(gc_buffer, &func->step); + zend_get_gc_buffer_add_zval(gc_buffer, &func->fini); + func = func->next; + } + + struct pdo_sqlite_collation *collation = H->collations; + while (collation) { + zend_get_gc_buffer_add_zval(gc_buffer, &collation->callback); + collation = collation->next; + } +} + static const struct pdo_dbh_methods sqlite_methods = { sqlite_handle_closer, sqlite_handle_preparer, @@ -710,7 +729,8 @@ static const struct pdo_dbh_methods sqlite_methods = { NULL, /* check_liveness: not needed */ get_driver_methods, pdo_sqlite_request_shutdown, - NULL + NULL, /* in_transaction */ + pdo_sqlite_get_gc }; static char *make_filename_safe(const char *filename) diff --git a/ext/pdo_sqlite/tests/gc.phpt b/ext/pdo_sqlite/tests/gc.phpt new file mode 100644 index 0000000000..25407697e6 --- /dev/null +++ b/ext/pdo_sqlite/tests/gc.phpt @@ -0,0 +1,24 @@ +--TEST-- +GC support for PDO Sqlite driver data +--SKIPIF-- +<?php +if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; +?> +--FILE-- +<?php + +class Obj { + public $a; + public function callback() { } +} + +$obj = new Obj; +$obj->a = new PDO('sqlite::memory:'); +$obj->a->sqliteCreateFunction('func1', function() use ($obj) {}, 1); +$obj->a->sqliteCreateAggregate('func2', function() use ($obj) {}, function() use($obj) {}); +$obj->a->sqliteCreateCollation('col', function() use ($obj) {}); + +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/ext/pgsql/tests/skipif.inc b/ext/pgsql/tests/skipif.inc index 38c2888afa..92712f3e05 100644 --- a/ext/pgsql/tests/skipif.inc +++ b/ext/pgsql/tests/skipif.inc @@ -12,6 +12,11 @@ include("lcmess.inc"); if (!extension_loaded("pgsql")) { die("skip pgsql extension not loaded\n"); } +if (getenv("SKIP_REPEAT")) { + // pgsql tests are order-dependent. + // We should probably change that, but in the meantime do not allow repetition. + die("skip Cannot repeat pgsql tests"); +} $conn = @pg_connect($conn_str); if (!is_resource($conn)) { die("skip could not connect\n"); diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c index 63732b77b0..4253f5f159 100644 --- a/ext/pspell/pspell.c +++ b/ext/pspell/pspell.c @@ -19,6 +19,7 @@ #endif #include "php.h" +#include "zend_interfaces.h" #include <stdlib.h> #include <ctype.h> @@ -48,58 +49,139 @@ static PHP_MINIT_FUNCTION(pspell); static PHP_MINFO_FUNCTION(pspell); -static int le_pspell, le_pspell_config; +static zend_class_entry *php_pspell_ce = NULL; +static zend_object_handlers php_pspell_handlers; +static zend_class_entry *php_pspell_config_ce = NULL; +static zend_object_handlers php_pspell_config_handlers; zend_module_entry pspell_module_entry = { STANDARD_MODULE_HEADER, - "pspell", ext_functions, PHP_MINIT(pspell), NULL, NULL, NULL, PHP_MINFO(pspell), PHP_PSPELL_VERSION, STANDARD_MODULE_PROPERTIES + "pspell", + ext_functions, + PHP_MINIT(pspell), + NULL, + NULL, + NULL, + PHP_MINFO(pspell), + PHP_PSPELL_VERSION, + STANDARD_MODULE_PROPERTIES, }; #ifdef COMPILE_DL_PSPELL ZEND_GET_MODULE(pspell) #endif -static void php_pspell_close(zend_resource *rsrc) +/* class PSpell */ + +typedef struct _php_pspell_object { + PspellManager *mgr; + zend_object std; +} php_pspell_object; + +static php_pspell_object *php_pspell_object_from_zend_object(zend_object *zobj) { + return ((php_pspell_object*)(zobj + 1)) - 1; +} + +static zend_object *php_pspell_object_to_zend_object(php_pspell_object *obj) { + return ((zend_object*)(obj + 1)) - 1; +} + +static zend_function *php_pspell_object_get_constructor(zend_object *object) { - PspellManager *manager = (PspellManager *)rsrc->ptr; + zend_throw_error(NULL, "You cannot initialize a PSpell object except through helper functions"); + return NULL; +} + +static zend_object *php_pspell_object_create(zend_class_entry *ce) +{ + php_pspell_object *obj = zend_object_alloc(sizeof(php_pspell_object), ce); + zend_object *zobj = php_pspell_object_to_zend_object(obj); + + obj->mgr = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &php_pspell_handlers; + + return zobj; +} + +static void php_pspell_object_free(zend_object *zobj) { + delete_pspell_manager(php_pspell_object_from_zend_object(zobj)->mgr); +} - delete_pspell_manager(manager); +/* class PSpellConfig */ + +typedef struct _php_pspell_config_object { + PspellConfig *cfg; + zend_object std; +} php_pspell_config_object; + +static php_pspell_config_object *php_pspell_config_object_from_zend_object(zend_object *zobj) { + return ((php_pspell_config_object*)(zobj + 1)) - 1; } -static void php_pspell_close_config(zend_resource *rsrc) +static zend_object *php_pspell_config_object_to_zend_object(php_pspell_config_object *obj) { + return ((zend_object*)(obj + 1)) - 1; +} + +static zend_function *php_pspell_config_object_get_constructor(zend_object *object) { - PspellConfig *config = (PspellConfig *)rsrc->ptr; + zend_throw_error(NULL, "You cannot initialize a PSpellConfig object except through helper functions"); + return NULL; +} - delete_pspell_config(config); +static zend_object *php_pspell_config_object_create(zend_class_entry *ce) +{ + php_pspell_config_object *obj = zend_object_alloc(sizeof(php_pspell_config_object), ce); + zend_object *zobj = php_pspell_config_object_to_zend_object(obj); + + obj->cfg = NULL; + zend_object_std_init(zobj, ce); + object_properties_init(zobj, ce); + zobj->handlers = &php_pspell_config_handlers; + + return zobj; } -#define PSPELL_FETCH_CONFIG do { \ - zval *res = zend_hash_index_find(&EG(regular_list), conf); \ - if (res == NULL || Z_RES_P(res)->type != le_pspell_config) { \ - zend_throw_error(NULL, "%s(): " ZEND_LONG_FMT " is not a PSPELL config index", get_active_function_name(), conf); \ - RETURN_THROWS(); \ - } \ - config = (PspellConfig *)Z_RES_P(res)->ptr; \ -} while (0) - -#define PSPELL_FETCH_MANAGER do { \ - zval *res = zend_hash_index_find(&EG(regular_list), scin); \ - if (res == NULL || Z_RES_P(res)->type != le_pspell) { \ - zend_throw_error(NULL, "%s(): " ZEND_LONG_FMT " is not a PSPELL result index", get_active_function_name(), scin); \ - RETURN_THROWS(); \ - } \ - manager = (PspellManager *)Z_RES_P(res)->ptr; \ -} while (0); +static void php_pspell_config_object_free(zend_object *zobj) { + delete_pspell_config(php_pspell_config_object_from_zend_object(zobj)->cfg); +} /* {{{ PHP_MINIT_FUNCTION */ static PHP_MINIT_FUNCTION(pspell) { + zend_class_entry ce; + INIT_CLASS_ENTRY(ce, "PSpell", class_PSpell_methods); + php_pspell_ce = zend_register_internal_class(&ce); + php_pspell_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + php_pspell_ce->create_object = php_pspell_object_create; + php_pspell_ce->serialize = zend_class_serialize_deny; + php_pspell_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&php_pspell_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + php_pspell_handlers.clone_obj = NULL; + php_pspell_handlers.free_obj = php_pspell_object_free; + php_pspell_handlers.get_constructor = php_pspell_object_get_constructor; + php_pspell_handlers.offset = XtOffsetOf(php_pspell_object, std); + + INIT_CLASS_ENTRY(ce, "PSpellConfig", class_PSpellConfig_methods); + php_pspell_config_ce = zend_register_internal_class(&ce); + php_pspell_config_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + php_pspell_config_ce->create_object = php_pspell_config_object_create; + php_pspell_config_ce->serialize = zend_class_serialize_deny; + php_pspell_config_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&php_pspell_config_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + php_pspell_config_handlers.clone_obj = NULL; + php_pspell_config_handlers.free_obj = php_pspell_config_object_free; + php_pspell_config_handlers.get_constructor = php_pspell_config_object_get_constructor; + php_pspell_config_handlers.offset = XtOffsetOf(php_pspell_config_object, std); + REGISTER_LONG_CONSTANT("PSPELL_FAST", PSPELL_FAST, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("PSPELL_NORMAL", PSPELL_NORMAL, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("PSPELL_BAD_SPELLERS", PSPELL_BAD_SPELLERS, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("PSPELL_RUN_TOGETHER", PSPELL_RUN_TOGETHER, CONST_PERSISTENT | CONST_CS); - le_pspell = zend_register_list_destructors_ex(php_pspell_close, NULL, "pspell", module_number); - le_pspell_config = zend_register_list_destructors_ex(php_pspell_close_config, NULL, "pspell config", module_number); + return SUCCESS; } /* }}} */ @@ -111,7 +193,6 @@ PHP_FUNCTION(pspell_new) size_t language_len, spelling_len = 0, jargon_len = 0, encoding_len = 0; zend_long mode = Z_L(0), speed = Z_L(0); int argc = ZEND_NUM_ARGS(); - zval *ind; #ifdef PHP_WIN32 TCHAR aspell_dir[200]; @@ -122,7 +203,6 @@ PHP_FUNCTION(pspell_new) #endif PspellCanHaveError *ret; - PspellManager *manager; PspellConfig *config; if (zend_parse_parameters(argc, "s|sssl", &language, &language_len, &spelling, &spelling_len, @@ -194,9 +274,8 @@ PHP_FUNCTION(pspell_new) RETURN_FALSE; } - manager = to_pspell_manager(ret); - ind = zend_list_insert(manager, le_pspell); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_ce); + php_pspell_object_from_zend_object(Z_OBJ_P(return_value))->mgr = to_pspell_manager(ret); } /* }}} */ @@ -207,7 +286,6 @@ PHP_FUNCTION(pspell_new_personal) size_t personal_len, language_len, spelling_len = 0, jargon_len = 0, encoding_len = 0; zend_long mode = Z_L(0), speed = Z_L(0); int argc = ZEND_NUM_ARGS(); - zval *ind; #ifdef PHP_WIN32 TCHAR aspell_dir[200]; @@ -218,7 +296,6 @@ PHP_FUNCTION(pspell_new_personal) #endif PspellCanHaveError *ret; - PspellManager *manager; PspellConfig *config; if (zend_parse_parameters(argc, "ps|sssl", &personal, &personal_len, &language, &language_len, @@ -298,26 +375,22 @@ PHP_FUNCTION(pspell_new_personal) RETURN_FALSE; } - manager = to_pspell_manager(ret); - ind = zend_list_insert(manager, le_pspell); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_ce); + php_pspell_object_from_zend_object(Z_OBJ_P(return_value))->mgr = to_pspell_manager(ret); } /* }}} */ /* {{{ Load a dictionary based on the given config */ PHP_FUNCTION(pspell_new_config) { - zend_long conf; - zval *ind; + zval *zcfg; PspellCanHaveError *ret; - PspellManager *manager; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &conf) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zcfg, php_pspell_config_ce) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; ret = new_pspell_manager(config); @@ -327,27 +400,24 @@ PHP_FUNCTION(pspell_new_config) RETURN_FALSE; } - manager = to_pspell_manager(ret); - ind = zend_list_insert(manager, le_pspell); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_ce); + php_pspell_object_from_zend_object(Z_OBJ_P(return_value))->mgr = to_pspell_manager(ret); } /* }}} */ /* {{{ Returns true if word is valid */ PHP_FUNCTION(pspell_check) { - size_t word_len; - zend_long scin; - char *word; + zval *zmgr; + zend_string *word; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; - PSPELL_FETCH_MANAGER; - - if (pspell_manager_check(manager, word)) { + if (pspell_manager_check(manager, ZSTR_VAL(word))) { RETURN_TRUE; } else { RETURN_FALSE; @@ -358,22 +428,20 @@ PHP_FUNCTION(pspell_check) /* {{{ Returns array of suggestions */ PHP_FUNCTION(pspell_suggest) { - zend_long scin; - char *word; - size_t word_len; + zval *zmgr; + zend_string *word; PspellManager *manager; const PspellWordList *wl; const char *sug; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; array_init(return_value); - wl = pspell_manager_suggest(manager, word); + wl = pspell_manager_suggest(manager, ZSTR_VAL(word)); if (wl) { PspellStringEmulation *els = pspell_word_list_elements(wl); while ((sug = pspell_string_emulation_next(els)) != 0) { @@ -390,18 +458,16 @@ PHP_FUNCTION(pspell_suggest) /* {{{ Notify the dictionary of a user-selected replacement */ PHP_FUNCTION(pspell_store_replacement) { - size_t miss_len, corr_len; - zend_long scin; - char *miss, *corr; + zval *zmgr; + zend_string *miss, *corr; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lss", &scin, &miss, &miss_len, &corr, &corr_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OSS", &zmgr, php_pspell_ce, &miss, &corr) == FAILURE) { RETURN_THROWS(); } + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; - PSPELL_FETCH_MANAGER; - - pspell_manager_store_replacement(manager, miss, corr); + pspell_manager_store_replacement(manager, ZSTR_VAL(miss), ZSTR_VAL(corr)); if (pspell_manager_error_number(manager) == 0) { RETURN_TRUE; } else { @@ -414,23 +480,21 @@ PHP_FUNCTION(pspell_store_replacement) /* {{{ Adds a word to a personal list */ PHP_FUNCTION(pspell_add_to_personal) { - size_t word_len; - zend_long scin; - char *word; + zval *zmgr; + zend_string *word; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/ - if (word_len == 0) { + if (ZSTR_LEN(word) == 0) { RETURN_FALSE; } - pspell_manager_add_to_personal(manager, word); + pspell_manager_add_to_personal(manager, ZSTR_VAL(word)); if (pspell_manager_error_number(manager) == 0) { RETURN_TRUE; } else { @@ -443,23 +507,21 @@ PHP_FUNCTION(pspell_add_to_personal) /* {{{ Adds a word to the current session */ PHP_FUNCTION(pspell_add_to_session) { - size_t word_len; - zend_long scin; - char *word; + zval *zmgr; + zend_string *word; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &scin, &word, &word_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &zmgr, php_pspell_ce, &word) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/ - if (word_len == 0) { + if (ZSTR_LEN(word) == 0) { RETURN_FALSE; } - pspell_manager_add_to_session(manager, word); + pspell_manager_add_to_session(manager, ZSTR_VAL(word)); if (pspell_manager_error_number(manager) == 0) { RETURN_TRUE; } else { @@ -472,14 +534,13 @@ PHP_FUNCTION(pspell_add_to_session) /* {{{ Clears the current session */ PHP_FUNCTION(pspell_clear_session) { - zend_long scin; + zval *zmgr; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &scin) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zmgr, php_pspell_ce) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; pspell_manager_clear_session(manager); if (pspell_manager_error_number(manager) == 0) { @@ -494,14 +555,13 @@ PHP_FUNCTION(pspell_clear_session) /* {{{ Saves the current (personal) wordlist */ PHP_FUNCTION(pspell_save_wordlist) { - zend_long scin; + zval *zmgr; PspellManager *manager; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &scin) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zmgr, php_pspell_ce) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_MANAGER; + manager = php_pspell_object_from_zend_object(Z_OBJ_P(zmgr))->mgr; pspell_manager_save_all_word_lists(manager); @@ -520,7 +580,6 @@ PHP_FUNCTION(pspell_config_create) { char *language, *spelling = NULL, *jargon = NULL, *encoding = NULL; size_t language_len, spelling_len = 0, jargon_len = 0, encoding_len = 0; - zval *ind; PspellConfig *config; #ifdef PHP_WIN32 @@ -577,23 +636,22 @@ PHP_FUNCTION(pspell_config_create) which is not what we want */ pspell_config_replace(config, "save-repl", "false"); - ind = zend_list_insert(config, le_pspell_config); - RETURN_LONG(Z_RES_HANDLE_P(ind)); + object_init_ex(return_value, php_pspell_config_ce); + php_pspell_config_object_from_zend_object(Z_OBJ_P(return_value))->cfg = config; } /* }}} */ /* {{{ Consider run-together words as valid components */ PHP_FUNCTION(pspell_config_runtogether) { - zend_long conf; + zval *zcfg; zend_bool runtogether; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &conf, &runtogether) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &zcfg, php_pspell_config_ce, &runtogether) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; pspell_config_replace(config, "run-together", runtogether ? "true" : "false"); @@ -604,14 +662,14 @@ PHP_FUNCTION(pspell_config_runtogether) /* {{{ Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS) */ PHP_FUNCTION(pspell_config_mode) { - zend_long conf, mode; + zval *zcfg; + zend_long mode; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &conf, &mode) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &zcfg, php_pspell_config_ce, &mode) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; /* First check what mode we want (how many suggestions) */ if (mode == PSPELL_FAST) { @@ -630,14 +688,14 @@ PHP_FUNCTION(pspell_config_mode) PHP_FUNCTION(pspell_config_ignore) { char ignore_str[MAX_LENGTH_OF_LONG + 1]; - zend_long conf, ignore = 0L; + zval *zcfg; + zend_long ignore = 0L; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &conf, &ignore) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &zcfg, php_pspell_config_ce, &ignore) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; snprintf(ignore_str, sizeof(ignore_str), ZEND_LONG_FMT, ignore); @@ -648,22 +706,20 @@ PHP_FUNCTION(pspell_config_ignore) static void pspell_config_path(INTERNAL_FUNCTION_PARAMETERS, char *option) { - zend_long conf; - char *value; - size_t value_len; + zval *zcfg; + zend_string *value; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lp", &conf, &value, &value_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OP", &zcfg, php_pspell_config_ce, &value) == FAILURE) { RETURN_THROWS(); } + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; - PSPELL_FETCH_CONFIG; - - if (php_check_open_basedir(value)) { + if (php_check_open_basedir(ZSTR_VAL(value))) { RETURN_FALSE; } - pspell_config_replace(config, option, value); + pspell_config_replace(config, option, ZSTR_VAL(value)); RETURN_TRUE; } @@ -692,24 +748,22 @@ PHP_FUNCTION(pspell_config_data_dir) /* {{{ Use a personal dictionary with replacement pairs for this config */ PHP_FUNCTION(pspell_config_repl) { - zend_long conf; - char *repl; - size_t repl_len; + zval *zcfg; + zend_string *repl; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lp", &conf, &repl, &repl_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "OP", &zcfg, php_pspell_config_ce, &repl) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; pspell_config_replace(config, "save-repl", "true"); - if (php_check_open_basedir(repl)) { + if (php_check_open_basedir(ZSTR_VAL(repl))) { RETURN_FALSE; } - pspell_config_replace(config, "repl", repl); + pspell_config_replace(config, "repl", ZSTR_VAL(repl)); RETURN_TRUE; } @@ -718,15 +772,14 @@ PHP_FUNCTION(pspell_config_repl) /* {{{ Save replacement pairs when personal list is saved for this config */ PHP_FUNCTION(pspell_config_save_repl) { - zend_long conf; + zval *zcfg; zend_bool save; PspellConfig *config; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &conf, &save) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ob", &zcfg, php_pspell_config_ce, &save) == FAILURE) { RETURN_THROWS(); } - - PSPELL_FETCH_CONFIG; + config = php_pspell_config_object_from_zend_object(Z_OBJ_P(zcfg))->cfg; pspell_config_replace(config, "save-repl", save ? "true" : "false"); diff --git a/ext/pspell/pspell.stub.php b/ext/pspell/pspell.stub.php index cf15fb35eb..a10de4b9f9 100644 --- a/ext/pspell/pspell.stub.php +++ b/ext/pspell/pspell.stub.php @@ -2,7 +2,10 @@ /** @generate-function-entries */ -function pspell_new(string $language, string $spelling = "", string $jargon = "", string $encoding = "", int $mode = 0): int|false {} +final class PSpell {} +final class PSpellConfig {} + +function pspell_new(string $language, string $spelling = "", string $jargon = "", string $encoding = "", int $mode = 0): PSpell|false {} function pspell_new_personal( string $filename, @@ -11,38 +14,24 @@ function pspell_new_personal( string $jargon = "", string $encoding = "", int $mode = 0 -): int|false {} - -function pspell_new_config(int $config): int|false {} - -function pspell_check(int $dictionary, string $word): bool {} - -function pspell_suggest(int $dictionary, string $word): array|false {} - -function pspell_store_replacement(int $dictionary, string $misspelled, string $correct): bool {} - -function pspell_add_to_personal(int $dictionary, string $word): bool {} - -function pspell_add_to_session(int $dictionary, string $word): bool {} - -function pspell_clear_session(int $dictionary): bool {} - -function pspell_save_wordlist(int $dictionary): bool {} - -function pspell_config_create(string $language, string $spelling = "", string $jargon = "", string $encoding = ""): int {} - -function pspell_config_runtogether(int $config, bool $allow): bool {} - -function pspell_config_mode(int $config, int $mode): bool {} - -function pspell_config_ignore(int $config, int $min_length): bool {} - -function pspell_config_personal(int $config, string $filename): bool {} - -function pspell_config_dict_dir(int $config, string $directory): bool {} - -function pspell_config_data_dir(int $config, string $directory): bool {} - -function pspell_config_repl(int $config, string $filename): bool {} - -function pspell_config_save_repl(int $config, bool $save): bool {} +): PSpell|false {} + +function pspell_new_config(PSpellConfig $config): PSpell|false {} + +function pspell_check(PSpell $dictionary, string $word): bool {} +function pspell_suggest(PSpell $dictionary, string $word): array|false {} +function pspell_store_replacement(PSpell $dictionary, string $misspelled, string $correct): bool {} +function pspell_add_to_personal(PSpell $dictionary, string $word): bool {} +function pspell_add_to_session(PSpell $dictionary, string $word): bool {} +function pspell_clear_session(PSpell $dictionary): bool {} +function pspell_save_wordlist(PSpell $dictionary): bool {} + +function pspell_config_create(string $language, string $spelling = "", string $jargon = "", string $encoding = ""): PSpellConfig {} +function pspell_config_runtogether(PSpellConfig $config, bool $allow): bool {} +function pspell_config_mode(PSpellConfig $config, int $mode): bool {} +function pspell_config_ignore(PSpellConfig $config, int $min_length): bool {} +function pspell_config_personal(PSpellConfig $config, string $filename): bool {} +function pspell_config_dict_dir(PSpellConfig $config, string $directory): bool {} +function pspell_config_data_dir(PSpellConfig $config, string $directory): bool {} +function pspell_config_repl(PSpellConfig $config, string $filename): bool {} +function pspell_config_save_repl(PSpellConfig $config, bool $save): bool {} diff --git a/ext/pspell/pspell_arginfo.h b/ext/pspell/pspell_arginfo.h index 102907461c..f3b7b55310 100644 --- a/ext/pspell/pspell_arginfo.h +++ b/ext/pspell/pspell_arginfo.h @@ -1,7 +1,7 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 1d201126072be285aa2dd3c0136cb7cc261f5841 */ + * Stub hash: efc4c20a1507cfba58ec265a2fe6f61b1e0f8a61 */ -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pspell_new, 0, 1, PSpell, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, language, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spelling, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, jargon, IS_STRING, 0, "\"\"") @@ -9,7 +9,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new, 0, 1, MAY_BE_LONG|MA ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new_personal, 0, 2, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pspell_new_personal, 0, 2, PSpell, MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, language, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spelling, IS_STRING, 0, "\"\"") @@ -18,22 +18,22 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new_personal, 0, 2, MAY_B ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_new_config, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_pspell_new_config, 0, 1, PSpell, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_check, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, dictionary, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_pspell_suggest, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, dictionary, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_store_replacement, 0, 3, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, dictionary, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_ARG_TYPE_INFO(0, misspelled, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, correct, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -43,12 +43,12 @@ ZEND_END_ARG_INFO() #define arginfo_pspell_add_to_session arginfo_pspell_check ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_clear_session, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, dictionary, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, dictionary, PSpell, 0) ZEND_END_ARG_INFO() #define arginfo_pspell_save_wordlist arginfo_pspell_clear_session -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_create, 0, 1, IS_LONG, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_pspell_config_create, 0, 1, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, language, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, spelling, IS_STRING, 0, "\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, jargon, IS_STRING, 0, "\"\"") @@ -56,27 +56,27 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_create, 0, 1, IS_L ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_runtogether, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, allow, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_mode, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_ignore, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, min_length, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_personal, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_dict_dir, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -85,7 +85,7 @@ ZEND_END_ARG_INFO() #define arginfo_pspell_config_repl arginfo_pspell_config_personal ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_pspell_config_save_repl, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, config, IS_LONG, 0) + ZEND_ARG_OBJ_INFO(0, config, PSpellConfig, 0) ZEND_ARG_TYPE_INFO(0, save, _IS_BOOL, 0) ZEND_END_ARG_INFO() @@ -133,3 +133,13 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(pspell_config_save_repl, arginfo_pspell_config_save_repl) ZEND_FE_END }; + + +static const zend_function_entry class_PSpell_methods[] = { + ZEND_FE_END +}; + + +static const zend_function_entry class_PSpellConfig_methods[] = { + ZEND_FE_END +}; diff --git a/ext/pspell/tests/003.phpt b/ext/pspell/tests/003.phpt index e8677ae826..63291a8d42 100644 --- a/ext/pspell/tests/003.phpt +++ b/ext/pspell/tests/003.phpt @@ -34,7 +34,7 @@ var_dump(pspell_config_ignore($cfg, PHP_INT_MAX)); bool(false) Warning: pspell_new_config(): PSPELL couldn't open the dictionary. reason: The encoding "b0rked" is not known. This could also mean that the file "%sb0rked.%s" could not be opened for reading or does not exist. in %s003.php on line 9 -pspell_check(): 0 is not a PSPELL result index +pspell_check(): Argument #1 ($dictionary) must be of type PSpell, bool given --- bool(true) bool(true) diff --git a/ext/readline/tests/libedit_info_001.phpt b/ext/readline/tests/libedit_info_001.phpt index 46618120fb..8b6fb80671 100644 --- a/ext/readline/tests/libedit_info_001.phpt +++ b/ext/readline/tests/libedit_info_001.phpt @@ -6,6 +6,7 @@ if (READLINE_LIB != "libedit") die("skip libedit only"); if(substr(PHP_OS, 0, 3) == 'WIN' ) { die('skip not for windows'); } +if (getenv('SKIP_REPEAT')) die("skip readline has global state"); ?> --FILE-- <?php diff --git a/ext/readline/tests/libedit_write_history_001.phpt b/ext/readline/tests/libedit_write_history_001.phpt index 96424e232f..69739c488e 100644 --- a/ext/readline/tests/libedit_write_history_001.phpt +++ b/ext/readline/tests/libedit_write_history_001.phpt @@ -6,6 +6,7 @@ if (READLINE_LIB != "libedit") die("skip libedit only"); if(substr(PHP_OS, 0, 3) == 'WIN' ) { die('skip not for windows'); } +if (getenv('SKIP_REPEAT')) die("skip readline has global state"); ?> --FILE-- <?php diff --git a/ext/readline/tests/readline_info_001.phpt b/ext/readline/tests/readline_info_001.phpt index 8f5d641d94..f0d4e67ca5 100644 --- a/ext/readline/tests/readline_info_001.phpt +++ b/ext/readline/tests/readline_info_001.phpt @@ -3,6 +3,7 @@ readline_info(): Basic test --SKIPIF-- <?php if (!extension_loaded("readline")) die("skip"); if (READLINE_LIB == "libedit") die("skip readline only"); +if (getenv('SKIP_REPEAT')) die("skip readline has global state"); ?> --FILE-- <?php diff --git a/ext/readline/tests/readline_read_history_001.phpt b/ext/readline/tests/readline_read_history_001.phpt index 6cabaf369b..8fbcaf1a27 100644 --- a/ext/readline/tests/readline_read_history_001.phpt +++ b/ext/readline/tests/readline_read_history_001.phpt @@ -1,7 +1,10 @@ --TEST-- readline_read_history(): Basic test --SKIPIF-- -<?php if (!extension_loaded("readline") || !function_exists('readline_list_history')) die("skip"); ?> +<?php +if (!extension_loaded("readline") || !function_exists('readline_list_history')) die("skip"); +if (getenv('SKIP_REPEAT')) die("skip readline has global state"); +?> --FILE-- <?php diff --git a/ext/readline/tests/readline_write_history_001.phpt b/ext/readline/tests/readline_write_history_001.phpt index 95c34e3e89..bcbeb5efa4 100644 --- a/ext/readline/tests/readline_write_history_001.phpt +++ b/ext/readline/tests/readline_write_history_001.phpt @@ -3,6 +3,7 @@ readline_write_history(): Basic test --SKIPIF-- <?php if (!extension_loaded("readline") || !function_exists('readline_add_history')) die("skip"); if (READLINE_LIB == "libedit") die("skip readline only"); +if (getenv('SKIP_REPEAT')) die("skip readline has global state"); ?> --FILE-- <?php diff --git a/ext/session/tests/003.phpt b/ext/session/tests/003.phpt index e7e4294375..4f9b37b75d 100644 --- a/ext/session/tests/003.phpt +++ b/ext/session/tests/003.phpt @@ -17,7 +17,7 @@ class foo { function method() { $this->yes++; } } -session_id("abtest"); +session_id("test003"); session_start(); session_decode('baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}'); diff --git a/ext/session/tests/004.phpt b/ext/session/tests/004.phpt index 4b81a088b2..c3ed0c5616 100644 --- a/ext/session/tests/004.phpt +++ b/ext/session/tests/004.phpt @@ -55,7 +55,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test004"); session_start(); $_SESSION["baz"]->method(); $_SESSION["arr"][3]->method(); @@ -75,7 +75,7 @@ session_destroy(); ?> --EXPECT-- OPEN: PHPSESSID -READ: abtest +READ: test004 object(foo)#2 (2) { ["bar"]=> string(2) "ok" @@ -91,9 +91,9 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test004, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} OPEN: PHPSESSID -READ: abtest +READ: test004 object(foo)#3 (2) { ["bar"]=> string(2) "ok" @@ -109,4 +109,4 @@ array(1) { int(2) } } -DESTROY: abtest +DESTROY: test004 diff --git a/ext/session/tests/005.phpt b/ext/session/tests/005.phpt index a7b42de7fa..2b51ceed94 100644 --- a/ext/session/tests/005.phpt +++ b/ext/session/tests/005.phpt @@ -56,7 +56,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test005"); session_start(); session_decode($hnd->data); @@ -91,7 +91,7 @@ session_destroy(); ?> --EXPECT-- OPEN: PHPSESSID -READ: abtest +READ: test005 object(foo)#4 (2) { ["bar"]=> string(2) "ok" @@ -107,10 +107,10 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test005, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} CLOSE OPEN: PHPSESSID -READ: abtest +READ: test005 object(foo)#2 (2) { ["bar"]=> string(2) "ok" @@ -127,10 +127,10 @@ array(1) { } } int(123) -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; +WRITE: test005, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; CLOSE OPEN: PHPSESSID -READ: abtest +READ: test005 object(foo)#4 (2) { ["bar"]=> string(2) "ok" @@ -147,5 +147,5 @@ array(1) { } } int(123) -DESTROY: abtest +DESTROY: test005 CLOSE diff --git a/ext/session/tests/006.phpt b/ext/session/tests/006.phpt index 68cea7314a..e3c048748f 100644 --- a/ext/session/tests/006.phpt +++ b/ext/session/tests/006.phpt @@ -13,7 +13,7 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test006"); session_start(); class a { diff --git a/ext/session/tests/009.phpt b/ext/session/tests/009.phpt index 10069c21d0..898cf76a5a 100644 --- a/ext/session/tests/009.phpt +++ b/ext/session/tests/009.phpt @@ -13,14 +13,14 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test009"); ### Phase 1 cleanup session_start(); session_destroy(); ### Phase 2 $_SESSION["c"] does not contain any value -session_id("abtest"); +session_id("test009"); session_start(); var_dump($_SESSION); $_SESSION["name"] = "foo"; diff --git a/ext/session/tests/012.phpt b/ext/session/tests/012.phpt index c555d2ca1e..ad3f54962e 100644 --- a/ext/session/tests/012.phpt +++ b/ext/session/tests/012.phpt @@ -14,7 +14,7 @@ error_reporting(E_ALL); ### Absurd example, value of $_SESSION does not matter -session_id("abtest"); +session_id("test012"); session_start(); $_SESSION["_SESSION"] = Array(); $_SESSION = "kk"; diff --git a/ext/session/tests/013.phpt b/ext/session/tests/013.phpt index 32909eb58c..07fcea407b 100644 --- a/ext/session/tests/013.phpt +++ b/ext/session/tests/013.phpt @@ -12,10 +12,10 @@ session.save_handler=files <?php error_reporting(E_ALL); -session_id("abtest"); +session_id("test013"); session_start(); session_destroy(); -session_id("abtest2"); +session_id("test013-2"); session_start(); session_destroy(); diff --git a/ext/session/tests/014.phpt b/ext/session/tests/014.phpt index d8369cfec5..a0c6515243 100644 --- a/ext/session/tests/014.phpt +++ b/ext/session/tests/014.phpt @@ -14,7 +14,7 @@ session.save_handler=files <?php error_reporting(E_ALL); -session_id("abtest"); +session_id("test014"); session_start(); ?> diff --git a/ext/session/tests/015.phpt b/ext/session/tests/015.phpt index 527b86bc1d..788f1eac06 100644 --- a/ext/session/tests/015.phpt +++ b/ext/session/tests/015.phpt @@ -16,7 +16,7 @@ session.save_handler=files <?php error_reporting(E_ALL); -session_id("abtest"); +session_id("test015"); session_start(); ?> <a href="/link?<?php echo SID; ?>"> @@ -24,4 +24,4 @@ session_start(); session_destroy(); ?> --EXPECT-- -<a href="/link?PHPSESSID=abtest&PHPSESSID=abtest"> +<a href="/link?PHPSESSID=test015&PHPSESSID=test015"> diff --git a/ext/session/tests/018.phpt b/ext/session/tests/018.phpt index 5ec132b34f..d132abf717 100644 --- a/ext/session/tests/018.phpt +++ b/ext/session/tests/018.phpt @@ -16,7 +16,7 @@ session.save_handler=files error_reporting(E_ALL); -session_id("abtest"); +session_id("test018"); session_start(); ?> <form accept-charset="ISO-8859-15, ISO-8859-1" action=url.php> @@ -24,4 +24,4 @@ session_start(); session_destroy(); ?> --EXPECT-- -<form accept-charset="ISO-8859-15, ISO-8859-1" action=url.php><input type="hidden" name="PHPSESSID" value="abtest" /> +<form accept-charset="ISO-8859-15, ISO-8859-1" action=url.php><input type="hidden" name="PHPSESSID" value="test018" /> diff --git a/ext/session/tests/019.phpt b/ext/session/tests/019.phpt index d9a478245b..e3793a5522 100644 --- a/ext/session/tests/019.phpt +++ b/ext/session/tests/019.phpt @@ -23,7 +23,7 @@ class TFoo { } } -session_id("abtest"); +session_id("test019"); session_start(); $_SESSION["o1"] = new TFoo(42); diff --git a/ext/session/tests/020.phpt b/ext/session/tests/020.phpt index 267e52191c..f4ec38c8fb 100644 --- a/ext/session/tests/020.phpt +++ b/ext/session/tests/020.phpt @@ -17,7 +17,7 @@ session.save_handler=files error_reporting(E_ALL); -session_id("abtest"); +session_id("test020"); session_start(); ?> <a href="link.php?a=b"> @@ -25,4 +25,4 @@ session_start(); session_destroy(); ?> --EXPECT-- -<a href="link.php?a=b&PHPSESSID=abtest"> +<a href="link.php?a=b&PHPSESSID=test020"> diff --git a/ext/session/tests/021.phpt b/ext/session/tests/021.phpt index 4a97d7d32a..2532324fee 100644 --- a/ext/session/tests/021.phpt +++ b/ext/session/tests/021.phpt @@ -19,7 +19,7 @@ error_reporting(E_ALL); ini_set('session.trans_sid_hosts', 'php.net'); $_SERVER['HTTP_HOST'] = 'php.net'; -session_id("abtest"); +session_id("test021"); session_start(); ?> <form action="//bad.net/do.php"> @@ -60,11 +60,11 @@ session_destroy(); --EXPECT-- <form action="//bad.net/do.php"> <fieldset> -<form action="//php.net/do.php"><input type="hidden" name="PHPSESSID" value="abtest" /> +<form action="//php.net/do.php"><input type="hidden" name="PHPSESSID" value="test021" /> <fieldset> -<form action="../do.php"><input type="hidden" name="PHPSESSID" value="abtest" /> +<form action="../do.php"><input type="hidden" name="PHPSESSID" value="test021" /> <fieldset> -<form action="/do.php"><input type="hidden" name="PHPSESSID" value="abtest" /> +<form action="/do.php"><input type="hidden" name="PHPSESSID" value="test021" /> <fieldset> -<form action="/foo/do.php"><input type="hidden" name="PHPSESSID" value="abtest" /> +<form action="/foo/do.php"><input type="hidden" name="PHPSESSID" value="test021" /> <fieldset> diff --git a/ext/session/tests/023.phpt b/ext/session/tests/023.phpt index 23c7096f23..e9ce084256 100644 --- a/ext/session/tests/023.phpt +++ b/ext/session/tests/023.phpt @@ -17,7 +17,7 @@ class foo { function method() { $this->yes++; } } -session_id("abtest"); +session_id("test023"); session_start(); session_decode('baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:1;}}'); $baz = $_SESSION['baz']; diff --git a/ext/session/tests/024.phpt b/ext/session/tests/024.phpt index 174f2e2639..913956f5b3 100644 --- a/ext/session/tests/024.phpt +++ b/ext/session/tests/024.phpt @@ -56,7 +56,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test024"); session_start(); $baz = $_SESSION['baz']; @@ -79,7 +79,7 @@ session_destroy(); ?> --EXPECTF-- OPEN: PHPSESSID -READ: abtest +READ: test024 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -95,9 +95,9 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test024, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} OPEN: PHPSESSID -READ: abtest +READ: test024 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -113,4 +113,4 @@ array(1) { int(2) } } -DESTROY: abtest +DESTROY: test024 diff --git a/ext/session/tests/025.phpt b/ext/session/tests/025.phpt index 172ea579c6..4e91da9796 100644 --- a/ext/session/tests/025.phpt +++ b/ext/session/tests/025.phpt @@ -57,7 +57,7 @@ class foo { session_set_save_handler(array($hnd, "open"), array($hnd, "close"), array($hnd, "read"), array($hnd, "write"), array($hnd, "destroy"), array($hnd, "gc")); -session_id("abtest"); +session_id("test025"); session_start(); $baz = $_SESSION['baz']; $arr = $_SESSION['arr']; @@ -93,7 +93,7 @@ session_destroy(); ?> --EXPECTF-- OPEN: PHPSESSID -READ: abtest +READ: test025 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -109,10 +109,10 @@ array(1) { int(2) } } -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} +WRITE: test025, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:2;}} CLOSE OPEN: PHPSESSID -READ: abtest +READ: test025 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -129,10 +129,10 @@ array(1) { } } int(123) -WRITE: abtest, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; +WRITE: test025, baz|O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}arr|a:1:{i:3;O:3:"foo":2:{s:3:"bar";s:2:"ok";s:3:"yes";i:3;}}c|i:123; CLOSE OPEN: PHPSESSID -READ: abtest +READ: test025 object(foo)#%d (2) { ["bar"]=> string(2) "ok" @@ -149,5 +149,5 @@ array(1) { } } int(123) -DESTROY: abtest +DESTROY: test025 CLOSE diff --git a/ext/session/tests/026.phpt b/ext/session/tests/026.phpt index b61039ee0c..f5abdac0a5 100644 --- a/ext/session/tests/026.phpt +++ b/ext/session/tests/026.phpt @@ -13,7 +13,7 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test026"); session_start(); class a { diff --git a/ext/session/tests/027.phpt b/ext/session/tests/027.phpt index ebaf25467c..969bc5b872 100644 --- a/ext/session/tests/027.phpt +++ b/ext/session/tests/027.phpt @@ -13,14 +13,14 @@ session.save_handler=files error_reporting(E_ALL); ob_start(); -session_id("abtest"); +session_id("test027"); ### Phase 1 cleanup session_start(); session_destroy(); ### Phase 2 $_SESSION["c"] does not contain any value -session_id("abtest"); +session_id("test027"); session_start(); var_dump($_SESSION); $_SESSION["name"] = "foo"; diff --git a/ext/session/tests/CONFLICTS b/ext/session/tests/CONFLICTS deleted file mode 100644 index 30888ae480..0000000000 --- a/ext/session/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -session diff --git a/ext/session/tests/bug41600.phpt b/ext/session/tests/bug41600.phpt index 79d5e12841..d4dfce9d88 100644 --- a/ext/session/tests/bug41600.phpt +++ b/ext/session/tests/bug41600.phpt @@ -17,7 +17,7 @@ session.save_handler=files error_reporting(E_ALL); -session_id("abtest"); +session_id("bug41600"); session_start(); ?> <a href="link.php?a=b"> @@ -25,4 +25,4 @@ session_start(); session_destroy(); ?> --EXPECT-- -<a href="link.php?a=b&PHPSESSID=abtest"> +<a href="link.php?a=b&PHPSESSID=bug41600"> diff --git a/ext/session/tests/bug42596.phpt b/ext/session/tests/bug42596.phpt index f27e86387e..83567bde5f 100644 --- a/ext/session/tests/bug42596.phpt +++ b/ext/session/tests/bug42596.phpt @@ -15,7 +15,7 @@ session.serialize_handler=php session.save_handler=files --FILE-- <?php -$sessdir = __DIR__.'/sessions/'; +$sessdir = __DIR__.'/bug42596/'; @rmdir($sessdir); mkdir($sessdir); $save_path = '0;0777;'.$sessdir; diff --git a/ext/session/tests/rfc1867.phpt b/ext/session/tests/rfc1867.phpt index 0e189b7aa6..a5ae8b2218 100644 --- a/ext/session/tests/rfc1867.phpt +++ b/ext/session/tests/rfc1867.phpt @@ -18,15 +18,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867 --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -50,7 +50,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_cleanup.phpt b/ext/session/tests/rfc1867_cleanup.phpt index ae5dcbe8dc..9baa6144ba 100644 --- a/ext/session/tests/rfc1867_cleanup.phpt +++ b/ext/session/tests/rfc1867_cleanup.phpt @@ -18,15 +18,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-cleanup --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-cleanup-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-cleanup-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -50,7 +50,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-cleanup" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_disabled.phpt b/ext/session/tests/rfc1867_disabled.phpt index 5bedb1de88..8d8effd1f4 100644 --- a/ext/session/tests/rfc1867_disabled.phpt +++ b/ext/session/tests/rfc1867_disabled.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-disabled --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-disabled-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-disabled-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="file1"; filename="file1.txt" @@ -44,7 +44,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-disabled" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_disabled_2.phpt b/ext/session/tests/rfc1867_disabled_2.phpt index d63748369d..c539c6eaea 100644 --- a/ext/session/tests/rfc1867_disabled_2.phpt +++ b/ext/session/tests/rfc1867_disabled_2.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-disabled-2 --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-disabled-2-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-disabled-2-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="file1"; filename="file1.txt" @@ -44,7 +44,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-disabled-2" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_inter.phpt b/ext/session/tests/rfc1867_inter.phpt index b961bbcac3..fd28dfe07a 100644 --- a/ext/session/tests/rfc1867_inter.phpt +++ b/ext/session/tests/rfc1867_inter.phpt @@ -18,15 +18,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-inter --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-inter-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-inter-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -54,7 +54,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__) . "_2"])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-inter" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_no_name.phpt b/ext/session/tests/rfc1867_no_name.phpt index 98e8e7cf09..15877a664e 100644 --- a/ext/session/tests/rfc1867_no_name.phpt +++ b/ext/session/tests/rfc1867_no_name.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-no-name --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-no-name-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-no-name-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="file1"; filename="file1.txt" @@ -44,7 +44,7 @@ var_dump(isset($_SESSION["upload_progress_" . basename(__FILE__)])); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-no-name" array(2) { ["file1"]=> array(5) { diff --git a/ext/session/tests/rfc1867_sid_cookie.phpt b/ext/session/tests/rfc1867_sid_cookie.phpt index 804a9ba308..85c28934f4 100644 --- a/ext/session/tests/rfc1867_sid_cookie.phpt +++ b/ext/session/tests/rfc1867_sid_cookie.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-cookie --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-sid-cookie-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-cookie-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -49,7 +49,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-cookie" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_get.phpt b/ext/session/tests/rfc1867_sid_get.phpt index 17d1ebce0f..dfb192cb47 100644 --- a/ext/session/tests/rfc1867_sid_get.phpt +++ b/ext/session/tests/rfc1867_sid_get.phpt @@ -17,13 +17,13 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --GET-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-get-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -47,7 +47,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-get" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_get_2.phpt b/ext/session/tests/rfc1867_sid_get_2.phpt index 4b32c6e352..33e4489cc8 100644 --- a/ext/session/tests/rfc1867_sid_get_2.phpt +++ b/ext/session/tests/rfc1867_sid_get_2.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests-cookie +PHPSESSID=rfc1867-sid-get-2-cookie --GET-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-get-2 --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-get-2-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -49,7 +49,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-get-2" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_only_cookie.phpt b/ext/session/tests/rfc1867_sid_only_cookie.phpt index 0c376bb026..54897b91c8 100644 --- a/ext/session/tests/rfc1867_sid_only_cookie.phpt +++ b/ext/session/tests/rfc1867_sid_only_cookie.phpt @@ -17,15 +17,15 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --COOKIE-- -PHPSESSID=rfc1867-tests +PHPSESSID=rfc1867-sid-only-cookie --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-sid-only-cookie-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-only-cookie-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -49,7 +49,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-only-cookie" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/rfc1867_sid_only_cookie_2.phpt b/ext/session/tests/rfc1867_sid_only_cookie_2.phpt index 9b0aae9429..3fd46148d7 100644 --- a/ext/session/tests/rfc1867_sid_only_cookie_2.phpt +++ b/ext/session/tests/rfc1867_sid_only_cookie_2.phpt @@ -16,13 +16,13 @@ session.save_handler=files --SKIPIF-- <?php include('skipif.inc'); ?> --GET-- -PHPSESSID=rfc1867-tests-get +PHPSESSID=rfc1867-sid-only-cookie-2-get --POST_RAW-- Content-Type: multipart/form-data; boundary=---------------------------20896060251896012921717172737 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests-post +rfc1867-sid-only-cookie-2-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" diff --git a/ext/session/tests/rfc1867_sid_post.phpt b/ext/session/tests/rfc1867_sid_post.phpt index a126f9ba38..f22f153403 100644 --- a/ext/session/tests/rfc1867_sid_post.phpt +++ b/ext/session/tests/rfc1867_sid_post.phpt @@ -21,7 +21,7 @@ Content-Type: multipart/form-data; boundary=---------------------------208960602 -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHPSESSID" -rfc1867-tests +rfc1867-sid-post -----------------------------20896060251896012921717172737 Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS" @@ -45,7 +45,7 @@ var_dump($_SESSION["upload_progress_" . basename(__FILE__)]); session_destroy(); ?> --EXPECTF-- -string(%d) "rfc1867-tests" +string(%d) "rfc1867-sid-post" bool(true) array(2) { ["file1"]=> diff --git a/ext/session/tests/session_basic1.phpt b/ext/session/tests/session_basic1.phpt index ffdcf6c5ec..13c21d3e85 100644 --- a/ext/session/tests/session_basic1.phpt +++ b/ext/session/tests/session_basic1.phpt @@ -17,7 +17,7 @@ ob_start(); echo "*** Testing basic session functionality : variation1 ***\n"; -$session_id = 'testid'; +$session_id = 'session-basic1'; session_id($session_id); $path = __DIR__; var_dump(session_save_path($path)); @@ -47,20 +47,20 @@ ob_end_flush(); *** Testing basic session functionality : variation1 *** string(0) "" *** Without lazy_write *** -string(6) "testid" +string(14) "session-basic1" bool(true) array(1) { ["lazy_write"]=> bool(false) } bool(true) -string(6) "testid" +string(14) "session-basic1" *** With lazy_write *** -string(6) "testid" +string(14) "session-basic1" bool(true) bool(true) -string(6) "testid" +string(14) "session-basic1" *** Cleanup *** -string(6) "testid" +string(14) "session-basic1" bool(true) bool(true) diff --git a/ext/session/tests/session_basic2.phpt b/ext/session/tests/session_basic2.phpt index cb9585303c..68230f89b7 100644 --- a/ext/session/tests/session_basic2.phpt +++ b/ext/session/tests/session_basic2.phpt @@ -19,7 +19,7 @@ ob_start(); echo "*** Testing basic session functionality : variation2 ***\n"; -$session_id = 'testid'; +$session_id = 'session-basic2'; session_id($session_id); $path = __DIR__; var_dump(session_save_path($path)); @@ -55,7 +55,7 @@ ob_end_flush(); *** Testing basic session functionality : variation2 *** string(0) "" *** Without lazy_write *** -string(6) "testid" +string(14) "session-basic2" bool(true) bool(true) bool(true) diff --git a/ext/session/tests/session_basic3.phpt b/ext/session/tests/session_basic3.phpt index f6ed10e296..5f6bd72b82 100644 --- a/ext/session/tests/session_basic3.phpt +++ b/ext/session/tests/session_basic3.phpt @@ -93,7 +93,7 @@ output_reset_rewrite_vars(); echo "*** Test trans sid ***\n"; ob_start(); -$session_id = 'testid'; +$session_id = 'session-basic3'; session_id($session_id); session_start(); // Should add session ID to relative URL only for SECURITY @@ -225,39 +225,39 @@ ob_end_flush(); *** Testing basic session functionality : variation3 use_trans_sid *** *** Test trans sid *** -<a href="/?PHPSESSID=testid">test</a> -<a href="/path?PHPSESSID=testid">test</a> -<a href="/path/?PHPSESSID=testid">test</a> -<a href="/path/?foo=var&PHPSESSID=testid">test</a> -<a href="../?PHPSESSID=testid">test</a> -<a href="../path?PHPSESSID=testid">test</a> -<a href="../path/?PHPSESSID=testid">test</a> -<a href="../path/?foo=var&PHPSESSID=testid">test</a> +<a href="/?PHPSESSID=session-basic3">test</a> +<a href="/path?PHPSESSID=session-basic3">test</a> +<a href="/path/?PHPSESSID=session-basic3">test</a> +<a href="/path/?foo=var&PHPSESSID=session-basic3">test</a> +<a href="../?PHPSESSID=session-basic3">test</a> +<a href="../path?PHPSESSID=session-basic3">test</a> +<a href="../path/?PHPSESSID=session-basic3">test</a> +<a href="../path/?foo=var&PHPSESSID=session-basic3">test</a> -<a href="/?PHPSESSID=testid#bar">test</a> -<a href="/path/?PHPSESSID=testid#bar">test</a> -<a href="/path/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="../?PHPSESSID=testid#bar">test</a> -<a href="../path/?PHPSESSID=testid#bar">test</a> -<a href="../path/?foo=var&PHPSESSID=testid#bar">test</a> +<a href="/?PHPSESSID=session-basic3#bar">test</a> +<a href="/path/?PHPSESSID=session-basic3#bar">test</a> +<a href="/path/?foo=var&PHPSESSID=session-basic3#bar">test</a> +<a href="../?PHPSESSID=session-basic3#bar">test</a> +<a href="../path/?PHPSESSID=session-basic3#bar">test</a> +<a href="../path/?foo=var&PHPSESSID=session-basic3#bar">test</a> -<a href="/?foo&PHPSESSID=testid">test</a> -<a href="/?foo&PHPSESSID=testid#bar">test</a> -<a href="/?foo=var&PHPSESSID=testid">test</a> -<a href="/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="../?foo&PHPSESSID=testid">test</a> -<a href="../?foo&PHPSESSID=testid#bar">test</a> -<a href="../?foo=var&PHPSESSID=testid">test</a> -<a href="../?foo=var&PHPSESSID=testid#bar">test</a> +<a href="/?foo&PHPSESSID=session-basic3">test</a> +<a href="/?foo&PHPSESSID=session-basic3#bar">test</a> +<a href="/?foo=var&PHPSESSID=session-basic3">test</a> +<a href="/?foo=var&PHPSESSID=session-basic3#bar">test</a> +<a href="../?foo&PHPSESSID=session-basic3">test</a> +<a href="../?foo&PHPSESSID=session-basic3#bar">test</a> +<a href="../?foo=var&PHPSESSID=session-basic3">test</a> +<a href="../?foo=var&PHPSESSID=session-basic3#bar">test</a> -<a href="file.php?PHPSESSID=testid">test</a> -<a href="file.php?foo&PHPSESSID=testid">test</a> -<a href="file.php?foo=var&PHPSESSID=testid">test</a> -<a href="file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="../file.php?PHPSESSID=testid">test</a> -<a href="../file.php?foo&PHPSESSID=testid">test</a> -<a href="../file.php?foo=var&PHPSESSID=testid">test</a> -<a href="../file.php?foo=var&PHPSESSID=testid#bar">test</a> +<a href="file.php?PHPSESSID=session-basic3">test</a> +<a href="file.php?foo&PHPSESSID=session-basic3">test</a> +<a href="file.php?foo=var&PHPSESSID=session-basic3">test</a> +<a href="file.php?foo=var&PHPSESSID=session-basic3#bar">test</a> +<a href="../file.php?PHPSESSID=session-basic3">test</a> +<a href="../file.php?foo&PHPSESSID=session-basic3">test</a> +<a href="../file.php?foo=var&PHPSESSID=session-basic3">test</a> +<a href="../file.php?foo=var&PHPSESSID=session-basic3#bar">test</a> <a href="http://php.net">test</a> <a href="http://php.net/">test</a> @@ -310,19 +310,19 @@ ob_end_flush(); <a href="//php.net/some/path/file.php?foo=var">test</a> <a href="//php.net/some/path/file.php?foo=var#bar">test</a> -<form action="script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<form action="script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic3" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form action="../script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<form action="../script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic3" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form action="/path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<form action="/path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic3" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form action="../path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<form action="../path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic3" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> @@ -341,5 +341,5 @@ ob_end_flush(); bool(true) *** Cleanup *** bool(true) -string(6) "testid" +string(14) "session-basic3" bool(true) diff --git a/ext/session/tests/session_basic5.phpt b/ext/session/tests/session_basic5.phpt index 50e6cde920..6a7511c317 100644 --- a/ext/session/tests/session_basic5.phpt +++ b/ext/session/tests/session_basic5.phpt @@ -24,7 +24,7 @@ ini_set('session.trans_sid_hosts','php.net,example.com'); echo "*** Testing basic session functionality : variation5 use_trans_sid ***\n"; echo "*** Test trans sid ***\n"; -$session_id = 'testid'; +$session_id = 'session-basic5'; session_id($session_id); session_start(); // Should add session ID to allowed hosts only for SECURITY @@ -238,116 +238,116 @@ ob_end_flush(); *** Testing basic session functionality : variation5 use_trans_sid *** *** Test trans sid *** -<a href="/?PHPSESSID=testid">test</a> -<a href="/path?PHPSESSID=testid">test</a> -<a href="/path/?PHPSESSID=testid">test</a> -<a href="/path/?foo=var&PHPSESSID=testid">test</a> -<a href="../?PHPSESSID=testid">test</a> -<a href="../path?PHPSESSID=testid">test</a> -<a href="../path/?PHPSESSID=testid">test</a> -<a href="../path/?foo=var&PHPSESSID=testid">test</a> - -<a href="/?PHPSESSID=testid#bar">test</a> -<a href="/path/?PHPSESSID=testid#bar">test</a> -<a href="/path/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="../?PHPSESSID=testid#bar">test</a> -<a href="../path/?PHPSESSID=testid#bar">test</a> -<a href="../path/?foo=var&PHPSESSID=testid#bar">test</a> - -<a href="/?foo&PHPSESSID=testid">test</a> -<a href="/?foo&PHPSESSID=testid#bar">test</a> -<a href="/?foo=var&PHPSESSID=testid">test</a> -<a href="/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="../?foo&PHPSESSID=testid">test</a> -<a href="../?foo&PHPSESSID=testid#bar">test</a> -<a href="../?foo=var&PHPSESSID=testid">test</a> -<a href="../?foo=var&PHPSESSID=testid#bar">test</a> - -<a href="file.php?PHPSESSID=testid">test</a> -<a href="file.php?foo&PHPSESSID=testid">test</a> -<a href="file.php?foo=var&PHPSESSID=testid">test</a> -<a href="file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="../file.php?PHPSESSID=testid">test</a> -<a href="../file.php?foo&PHPSESSID=testid">test</a> -<a href="../file.php?foo=var&PHPSESSID=testid">test</a> -<a href="../file.php?foo=var&PHPSESSID=testid#bar">test</a> - -<a href="http://php.net/?PHPSESSID=testid">test</a> -<a href="http://php.net/?PHPSESSID=testid">test</a> -<a href="http://php.net/?PHPSESSID=testid#bar">test</a> -<a href="http://php.net/?foo&PHPSESSID=testid">test</a> -<a href="http://php.net/?foo&PHPSESSID=testid#bar">test</a> -<a href="http://php.net/?foo=var&PHPSESSID=testid">test</a> -<a href="http://php.net/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="http://php.net/file.php?PHPSESSID=testid">test</a> -<a href="http://php.net/file.php?PHPSESSID=testid#bar">test</a> -<a href="http://php.net/file.php?foo&PHPSESSID=testid">test</a> -<a href="http://php.net/file.php?foo&PHPSESSID=testid#bar">test</a> -<a href="http://php.net/file.php?foo=var&PHPSESSID=testid">test</a> -<a href="http://php.net/file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="http://php.net/some/path/file.php?PHPSESSID=testid">test</a> -<a href="http://php.net/some/path/file.php?foo&PHPSESSID=testid">test</a> -<a href="http://php.net/some/path/file.php?foo=var&PHPSESSID=testid">test</a> -<a href="http://php.net/some/path/file.php?foo=var&PHPSESSID=testid#bar">test</a> - -<a href="https://php.net/?PHPSESSID=testid">test</a> -<a href="https://php.net/?PHPSESSID=testid">test</a> -<a href="https://php.net/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="https://php.net/file.php?PHPSESSID=testid">test</a> -<a href="https://php.net/file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="https://php.net/some/path/file.php?PHPSESSID=testid">test</a> -<a href="https://php.net/some/path/file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="https://php.net:8443/?PHPSESSID=testid">test</a> -<a href="https://php.net:8443/?PHPSESSID=testid">test</a> -<a href="https://php.net:8443/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="https://php.net:8443/file.php?PHPSESSID=testid">test</a> -<a href="https://php.net:8443/file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="https://php.net:8443/some/path/file.php?PHPSESSID=testid">test</a> -<a href="https://php.net:8443/some/path/file.php?foo=var&PHPSESSID=testid#bar">test</a> - -<a href="//php.net/?PHPSESSID=testid">test</a> -<a href="//php.net/?PHPSESSID=testid">test</a> -<a href="//php.net/?PHPSESSID=testid#bar">test</a> -<a href="//php.net/?foo&PHPSESSID=testid">test</a> -<a href="//php.net/?foo&PHPSESSID=testid#bar">test</a> -<a href="//php.net/?foo=var&PHPSESSID=testid">test</a> -<a href="//php.net/?foo=var&PHPSESSID=testid#bar">test</a> -<a href="//php.net/file.php?PHPSESSID=testid">test</a> -<a href="//php.net/file.php?PHPSESSID=testid#bar">test</a> -<a href="//php.net/file.php?foo&PHPSESSID=testid">test</a> -<a href="//php.net/file.php?foo&PHPSESSID=testid#bar">test</a> -<a href="//php.net/file.php?foo=var&PHPSESSID=testid">test</a> -<a href="//php.net/file.php?foo=var&PHPSESSID=testid#bar">test</a> -<a href="//php.net/some/path/file.php?PHPSESSID=testid">test</a> -<a href="//php.net/some/path/file.php?foo&PHPSESSID=testid">test</a> -<a href="//php.net/some/path/file.php?foo=var&PHPSESSID=testid">test</a> -<a href="//php.net/some/path/file.php?foo=var&PHPSESSID=testid#bar">test</a> - -<form action="script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<a href="/?PHPSESSID=session-basic5">test</a> +<a href="/path?PHPSESSID=session-basic5">test</a> +<a href="/path/?PHPSESSID=session-basic5">test</a> +<a href="/path/?foo=var&PHPSESSID=session-basic5">test</a> +<a href="../?PHPSESSID=session-basic5">test</a> +<a href="../path?PHPSESSID=session-basic5">test</a> +<a href="../path/?PHPSESSID=session-basic5">test</a> +<a href="../path/?foo=var&PHPSESSID=session-basic5">test</a> + +<a href="/?PHPSESSID=session-basic5#bar">test</a> +<a href="/path/?PHPSESSID=session-basic5#bar">test</a> +<a href="/path/?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="../?PHPSESSID=session-basic5#bar">test</a> +<a href="../path/?PHPSESSID=session-basic5#bar">test</a> +<a href="../path/?foo=var&PHPSESSID=session-basic5#bar">test</a> + +<a href="/?foo&PHPSESSID=session-basic5">test</a> +<a href="/?foo&PHPSESSID=session-basic5#bar">test</a> +<a href="/?foo=var&PHPSESSID=session-basic5">test</a> +<a href="/?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="../?foo&PHPSESSID=session-basic5">test</a> +<a href="../?foo&PHPSESSID=session-basic5#bar">test</a> +<a href="../?foo=var&PHPSESSID=session-basic5">test</a> +<a href="../?foo=var&PHPSESSID=session-basic5#bar">test</a> + +<a href="file.php?PHPSESSID=session-basic5">test</a> +<a href="file.php?foo&PHPSESSID=session-basic5">test</a> +<a href="file.php?foo=var&PHPSESSID=session-basic5">test</a> +<a href="file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="../file.php?PHPSESSID=session-basic5">test</a> +<a href="../file.php?foo&PHPSESSID=session-basic5">test</a> +<a href="../file.php?foo=var&PHPSESSID=session-basic5">test</a> +<a href="../file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> + +<a href="http://php.net/?PHPSESSID=session-basic5">test</a> +<a href="http://php.net/?PHPSESSID=session-basic5">test</a> +<a href="http://php.net/?PHPSESSID=session-basic5#bar">test</a> +<a href="http://php.net/?foo&PHPSESSID=session-basic5">test</a> +<a href="http://php.net/?foo&PHPSESSID=session-basic5#bar">test</a> +<a href="http://php.net/?foo=var&PHPSESSID=session-basic5">test</a> +<a href="http://php.net/?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="http://php.net/file.php?PHPSESSID=session-basic5">test</a> +<a href="http://php.net/file.php?PHPSESSID=session-basic5#bar">test</a> +<a href="http://php.net/file.php?foo&PHPSESSID=session-basic5">test</a> +<a href="http://php.net/file.php?foo&PHPSESSID=session-basic5#bar">test</a> +<a href="http://php.net/file.php?foo=var&PHPSESSID=session-basic5">test</a> +<a href="http://php.net/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="http://php.net/some/path/file.php?PHPSESSID=session-basic5">test</a> +<a href="http://php.net/some/path/file.php?foo&PHPSESSID=session-basic5">test</a> +<a href="http://php.net/some/path/file.php?foo=var&PHPSESSID=session-basic5">test</a> +<a href="http://php.net/some/path/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> + +<a href="https://php.net/?PHPSESSID=session-basic5">test</a> +<a href="https://php.net/?PHPSESSID=session-basic5">test</a> +<a href="https://php.net/?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="https://php.net/file.php?PHPSESSID=session-basic5">test</a> +<a href="https://php.net/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="https://php.net/some/path/file.php?PHPSESSID=session-basic5">test</a> +<a href="https://php.net/some/path/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="https://php.net:8443/?PHPSESSID=session-basic5">test</a> +<a href="https://php.net:8443/?PHPSESSID=session-basic5">test</a> +<a href="https://php.net:8443/?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="https://php.net:8443/file.php?PHPSESSID=session-basic5">test</a> +<a href="https://php.net:8443/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="https://php.net:8443/some/path/file.php?PHPSESSID=session-basic5">test</a> +<a href="https://php.net:8443/some/path/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> + +<a href="//php.net/?PHPSESSID=session-basic5">test</a> +<a href="//php.net/?PHPSESSID=session-basic5">test</a> +<a href="//php.net/?PHPSESSID=session-basic5#bar">test</a> +<a href="//php.net/?foo&PHPSESSID=session-basic5">test</a> +<a href="//php.net/?foo&PHPSESSID=session-basic5#bar">test</a> +<a href="//php.net/?foo=var&PHPSESSID=session-basic5">test</a> +<a href="//php.net/?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="//php.net/file.php?PHPSESSID=session-basic5">test</a> +<a href="//php.net/file.php?PHPSESSID=session-basic5#bar">test</a> +<a href="//php.net/file.php?foo&PHPSESSID=session-basic5">test</a> +<a href="//php.net/file.php?foo&PHPSESSID=session-basic5#bar">test</a> +<a href="//php.net/file.php?foo=var&PHPSESSID=session-basic5">test</a> +<a href="//php.net/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> +<a href="//php.net/some/path/file.php?PHPSESSID=session-basic5">test</a> +<a href="//php.net/some/path/file.php?foo&PHPSESSID=session-basic5">test</a> +<a href="//php.net/some/path/file.php?foo=var&PHPSESSID=session-basic5">test</a> +<a href="//php.net/some/path/file.php?foo=var&PHPSESSID=session-basic5#bar">test</a> + +<form action="script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic5" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form action="../script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" />r +<form action="../script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic5" />r <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form action="/path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<form action="/path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic5" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form action="../path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="testid" /> +<form action="../path/script.php" method="post"><input type="hidden" name="PHPSESSID" value="session-basic5" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form method="post" action="http://php.net/script.php"><input type="hidden" name="PHPSESSID" value="testid" /> +<form method="post" action="http://php.net/script.php"><input type="hidden" name="PHPSESSID" value="session-basic5" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form method="post" action="https://php.net/script.php"><input type="hidden" name="PHPSESSID" value="testid" /> +<form method="post" action="https://php.net/script.php"><input type="hidden" name="PHPSESSID" value="session-basic5" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> -<form method="post" action="//php.net/script.php"><input type="hidden" name="PHPSESSID" value="testid" /> +<form method="post" action="//php.net/script.php"><input type="hidden" name="PHPSESSID" value="session-basic5" /> <input type="text" name="test1"></input> <input type="text" name="test2" /> </form> @@ -436,5 +436,5 @@ ob_end_flush(); bool(true) *** Cleanup *** bool(true) -string(6) "testid" +string(14) "session-basic5" bool(true) diff --git a/ext/session/tests/session_commit_variation4.phpt b/ext/session/tests/session_commit_variation4.phpt index 2633f543af..b0c3ad4a94 100644 --- a/ext/session/tests/session_commit_variation4.phpt +++ b/ext/session/tests/session_commit_variation4.phpt @@ -12,7 +12,7 @@ ob_start(); echo "*** Testing session_commit() : variation ***\n"; var_dump(ini_get('session.use_strict_mode')); -var_dump(session_id("test")); +var_dump(session_id("session-commit-variation4")); var_dump(session_start()); var_dump(session_id()); var_dump(session_commit()); @@ -38,18 +38,18 @@ ob_end_flush(); string(1) "0" string(0) "" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) string(1) "0" -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) -string(4) "test" +string(25) "session-commit-variation4" bool(true) bool(true) string(1) "0" diff --git a/ext/session/tests/session_module_name_variation4.phpt b/ext/session/tests/session_module_name_variation4.phpt index 9b845151a8..7e58ddc6c4 100644 --- a/ext/session/tests/session_module_name_variation4.phpt +++ b/ext/session/tests/session_module_name_variation4.phpt @@ -15,6 +15,8 @@ echo "*** Testing session_module_name() : variation ***\n"; require_once "save_handler.inc"; $path = __DIR__; +$path = __DIR__ . '/session_module_name_variation4'; +@mkdir($path); session_save_path($path); session_module_name("files"); @@ -35,6 +37,7 @@ var_dump($_SESSION); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECT-- *** Testing session_module_name() : variation *** diff --git a/ext/session/tests/session_save_path_variation4.phpt b/ext/session/tests/session_save_path_variation4.phpt index 8b3df52262..ec22e92051 100644 --- a/ext/session/tests/session_save_path_variation4.phpt +++ b/ext/session/tests/session_save_path_variation4.phpt @@ -14,7 +14,7 @@ ob_start(); echo "*** Testing session_save_path() : variation ***\n"; $initdir = __DIR__; -$sessions = ($initdir."/sessions"); +$sessions = ($initdir."/session_save_path_variation4"); chdir($initdir); @@ -38,7 +38,7 @@ ob_end_flush(); --CLEAN-- <?php $initdir = __DIR__; -$sessions = ($initdir."/sessions"); +$sessions = ($initdir."/session_save_path_variation4"); var_dump(rmdir($sessions)); ?> --EXPECTF-- diff --git a/ext/session/tests/session_save_path_variation5.phpt b/ext/session/tests/session_save_path_variation5.phpt index 446a472ab4..3977d0deab 100644 --- a/ext/session/tests/session_save_path_variation5.phpt +++ b/ext/session/tests/session_save_path_variation5.phpt @@ -15,7 +15,7 @@ session.name=PHPSESSID ob_start(); echo "*** Testing session_save_path() : variation ***\n"; $directory = __DIR__; -$sessions = ($directory."/sessions"); +$sessions = ($directory."/session_save_path_variation5"); chdir($directory); ini_set('open_basedir', '.'); @@ -36,7 +36,7 @@ ob_end_flush(); --CLEAN-- <?php $directory = __DIR__; -$sessions = ($directory."/sessions"); +$sessions = ($directory."/session_save_path_variation5"); var_dump(rmdir($sessions)); ?> --EXPECTF-- diff --git a/ext/session/tests/session_set_save_handler_basic.phpt b/ext/session/tests/session_set_save_handler_basic.phpt index 459f03c825..23865aa512 100644 --- a/ext/session/tests/session_set_save_handler_basic.phpt +++ b/ext/session/tests/session_set_save_handler_basic.phpt @@ -20,7 +20,8 @@ var_dump(session_module_name(FALSE)); var_dump(session_module_name("blah")); var_dump(session_module_name("foo")); -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_basic'; +@mkdir($path); session_save_path($path); session_set_save_handler("open", "close", "read", "write", "destroy", "gc"); @@ -55,6 +56,7 @@ session_start(); session_destroy(); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : basic functionality *** diff --git a/ext/session/tests/session_set_save_handler_variation2.phpt b/ext/session/tests/session_set_save_handler_variation2.phpt index 224846466e..a4b7d4df6e 100644 --- a/ext/session/tests/session_set_save_handler_variation2.phpt +++ b/ext/session/tests/session_set_save_handler_variation2.phpt @@ -10,13 +10,15 @@ ob_start(); echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation2'; +@mkdir($path); session_save_path($path); var_dump(session_start()); var_dump(session_set_save_handler("open", "close", "read", "write", "destroy", "gc")); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** diff --git a/ext/session/tests/session_set_save_handler_variation3.phpt b/ext/session/tests/session_set_save_handler_variation3.phpt index be825cbe72..cc0ae1fb23 100644 --- a/ext/session/tests/session_set_save_handler_variation3.phpt +++ b/ext/session/tests/session_set_save_handler_variation3.phpt @@ -12,13 +12,15 @@ ob_start(); echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation3'; +@mkdir($path); var_dump(session_status()); session_save_path($path); var_dump(session_set_save_handler("open", "close", "read", "write", "destroy", "gc")); var_dump(session_destroy()); - ob_end_flush(); + +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** diff --git a/ext/session/tests/session_set_save_handler_variation4.phpt b/ext/session/tests/session_set_save_handler_variation4.phpt index e1b61f29a7..9930f7aaf2 100644 --- a/ext/session/tests/session_set_save_handler_variation4.phpt +++ b/ext/session/tests/session_set_save_handler_variation4.phpt @@ -23,7 +23,8 @@ function noisy_gc($maxlifetime) { } require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation4'; +@mkdir($path); session_save_path($path); session_set_save_handler("open", "close", "read", "write", "destroy", "noisy_gc"); @@ -42,13 +43,14 @@ var_dump($_SESSION); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** Open [%s,PHPSESSID] Read [%s,%s] GC [0] -2 deleted +1 deleted array(3) { ["Blah"]=> string(12) "Hello World!" diff --git a/ext/session/tests/session_set_save_handler_variation5.phpt b/ext/session/tests/session_set_save_handler_variation5.phpt index 9860dcc04a..7cf7814259 100644 --- a/ext/session/tests/session_set_save_handler_variation5.phpt +++ b/ext/session/tests/session_set_save_handler_variation5.phpt @@ -24,7 +24,8 @@ function noisy_gc($maxlifetime) { echo "*** Testing session_set_save_handler() : variation ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation5'; +@mkdir($path); var_dump(session_save_path($path)); echo "*** Without lazy_write ***\n"; @@ -48,6 +49,7 @@ var_dump(session_start()); var_dump(session_destroy()); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : variation *** diff --git a/ext/session/tests/session_set_save_handler_variation6.phpt b/ext/session/tests/session_set_save_handler_variation6.phpt index d65c0dc1c8..11af07f603 100644 --- a/ext/session/tests/session_set_save_handler_variation6.phpt +++ b/ext/session/tests/session_set_save_handler_variation6.phpt @@ -17,7 +17,8 @@ ob_start(); echo "*** Testing session_set_save_handler() : test write short circuit ***\n"; require_once "save_handler.inc"; -$path = __DIR__; +$path = __DIR__ . '/session_set_save_handler_variation6'; +@mkdir($path); session_save_path($path); session_set_save_handler("open", "close", "read", "write", "destroy", "gc", "create_sid", "validate_sid", "update"); @@ -53,6 +54,7 @@ session_start(); session_destroy(); ob_end_flush(); +rmdir($path); ?> --EXPECTF-- *** Testing session_set_save_handler() : test write short circuit *** diff --git a/ext/soap/tests/bug73037.phpt b/ext/soap/tests/bug73037.phpt index 4e72932862..8060575bd8 100644 --- a/ext/soap/tests/bug73037.phpt +++ b/ext/soap/tests/bug73037.phpt @@ -1,7 +1,5 @@ --TEST-- Bug #73037 SoapServer reports Bad Request when gzipped, var 0 ---CONFLICTS-- -server --SKIPIF-- <?php require_once('skipif.inc'); diff --git a/ext/soap/tests/custom_content_type.phpt b/ext/soap/tests/custom_content_type.phpt index 17a074f102..9172d3d6ca 100644 --- a/ext/soap/tests/custom_content_type.phpt +++ b/ext/soap/tests/custom_content_type.phpt @@ -8,8 +8,6 @@ SOAP customized Content-Type, eg. SwA use case echo "skip sapi/cli/tests/php_cli_server.inc required but not found"; } ?> ---CONFLICTS-- -server --FILE-- <?php diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index 6118610cac..a9d0e4b885 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -1044,11 +1044,7 @@ PHP_FUNCTION(socket_read) if (retval == -1) { /* if the socket is in non-blocking mode and there's no data to read, don't output any error, as this is a normal situation, and not an error */ - if (errno == EAGAIN -#ifdef EWOULDBLOCK - || errno == EWOULDBLOCK -#endif - ) { + if (PHP_IS_TRANSIENT_ERROR(errno)) { php_sock->error = errno; SOCKETS_G(last_error) = errno; } else { diff --git a/ext/sodium/config.m4 b/ext/sodium/config.m4 index 0676b66910..05d9ebd5a1 100644 --- a/ext/sodium/config.m4 +++ b/ext/sodium/config.m4 @@ -11,8 +11,9 @@ if test "$PHP_SODIUM" != "no"; then AC_DEFINE(HAVE_LIBSODIUMLIB, 1, [ ]) - dnl Add -Wno-type-limits as this may arise on 32bits platforms + dnl Add -Wno-type-limits and -Wno-logical-op as this may arise on 32bits platforms SODIUM_COMPILER_FLAGS="$LIBSODIUM_CFLAGS -Wno-type-limits" + AX_CHECK_COMPILE_FLAG([-Wno-logical-op], SODIUM_COMPILER_FLAGS="$SODIUM_COMPILER_FLAGS -Wno-logical-op", , [-Werror]) PHP_NEW_EXTENSION(sodium, libsodium.c sodium_pwhash.c, $ext_shared, , $SODIUM_COMPILER_FLAGS) PHP_SUBST(SODIUM_SHARED_LIBADD) fi diff --git a/ext/standard/array.c b/ext/standard/array.c index f99af84611..3a50e77100 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1321,7 +1321,13 @@ PHP_FUNCTION(max) } /* }}} */ -static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ +typedef struct { + zend_fcall_info fci; + zend_fcall_info_cache fci_cache; +} php_array_walk_context; + +static int php_array_walk( + php_array_walk_context *context, zval *array, zval *userdata, int recursive) { zval args[3], /* Arguments to userland function */ retval, /* Return value - unused */ @@ -1331,15 +1337,19 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ uint32_t ht_iter; int result = SUCCESS; + /* Create a local copy of fci, as we want to use different arguments at different + * levels of recursion. */ + zend_fcall_info fci = context->fci; + /* Set up known arguments */ ZVAL_UNDEF(&args[1]); if (userdata) { ZVAL_COPY(&args[2], userdata); } - BG(array_walk_fci).retval = &retval; - BG(array_walk_fci).param_count = userdata ? 3 : 2; - BG(array_walk_fci).params = args; + fci.retval = &retval; + fci.param_count = userdata ? 3 : 2; + fci.params = args; zend_hash_internal_pointer_reset_ex(target_hash, &pos); ht_iter = zend_hash_iterator_add(target_hash, pos); @@ -1386,8 +1396,6 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ if (recursive && Z_TYPE_P(Z_REFVAL_P(zv)) == IS_ARRAY) { HashTable *thash; - zend_fcall_info orig_array_walk_fci; - zend_fcall_info_cache orig_array_walk_fci_cache; zval ref; ZVAL_COPY_VALUE(&ref, zv); @@ -1400,28 +1408,20 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ break; } - /* backup the fcall info and cache */ - orig_array_walk_fci = BG(array_walk_fci); - orig_array_walk_fci_cache = BG(array_walk_fci_cache); - Z_ADDREF(ref); GC_PROTECT_RECURSION(thash); - result = php_array_walk(zv, userdata, recursive); + result = php_array_walk(context, zv, userdata, recursive); if (Z_TYPE_P(Z_REFVAL(ref)) == IS_ARRAY && thash == Z_ARRVAL_P(Z_REFVAL(ref))) { /* If the hashtable changed in the meantime, we'll "leak" this apply count * increment -- our reference to thash is no longer valid. */ GC_UNPROTECT_RECURSION(thash); } zval_ptr_dtor(&ref); - - /* restore the fcall info and cache */ - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; } else { ZVAL_COPY(&args[0], zv); /* Call the userland function */ - result = zend_call_function(&BG(array_walk_fci), &BG(array_walk_fci_cache)); + result = zend_call_function(&fci, &context->fci_cache); if (result == SUCCESS) { zval_ptr_dtor(&retval); } @@ -1458,33 +1458,22 @@ static int php_array_walk(zval *array, zval *userdata, int recursive) /* {{{ */ zend_hash_iterator_del(ht_iter); return result; } -/* }}} */ /* {{{ Apply a user function to every member of an array */ PHP_FUNCTION(array_walk) { zval *array; zval *userdata = NULL; - zend_fcall_info orig_array_walk_fci; - zend_fcall_info_cache orig_array_walk_fci_cache; - - orig_array_walk_fci = BG(array_walk_fci); - orig_array_walk_fci_cache = BG(array_walk_fci_cache); + php_array_walk_context context; ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_ARRAY_OR_OBJECT_EX(array, 0, 1) - Z_PARAM_FUNC(BG(array_walk_fci), BG(array_walk_fci_cache)) + Z_PARAM_FUNC(context.fci, context.fci_cache) Z_PARAM_OPTIONAL Z_PARAM_ZVAL(userdata) - ZEND_PARSE_PARAMETERS_END_EX( - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; - return - ); - - php_array_walk(array, userdata, 0); - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; + ZEND_PARSE_PARAMETERS_END(); + + php_array_walk(&context, array, userdata, 0); RETURN_TRUE; } /* }}} */ @@ -1494,26 +1483,16 @@ PHP_FUNCTION(array_walk_recursive) { zval *array; zval *userdata = NULL; - zend_fcall_info orig_array_walk_fci; - zend_fcall_info_cache orig_array_walk_fci_cache; - - orig_array_walk_fci = BG(array_walk_fci); - orig_array_walk_fci_cache = BG(array_walk_fci_cache); + php_array_walk_context context; ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_ARRAY_OR_OBJECT_EX(array, 0, 1) - Z_PARAM_FUNC(BG(array_walk_fci), BG(array_walk_fci_cache)) + Z_PARAM_FUNC(context.fci, context.fci_cache) Z_PARAM_OPTIONAL Z_PARAM_ZVAL(userdata) - ZEND_PARSE_PARAMETERS_END_EX( - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; - return - ); - - php_array_walk(array, userdata, 1); - BG(array_walk_fci) = orig_array_walk_fci; - BG(array_walk_fci_cache) = orig_array_walk_fci_cache; + ZEND_PARSE_PARAMETERS_END(); + + php_array_walk(&context, array, userdata, 1); RETURN_TRUE; } /* }}} */ diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 876ef347eb..33247c4cb3 100755 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -463,8 +463,6 @@ PHP_RINIT_FUNCTION(basic) /* {{{ */ BG(strtok_last) = NULL; BG(ctype_string) = NULL; BG(locale_changed) = 0; - BG(array_walk_fci) = empty_fcall_info; - BG(array_walk_fci_cache) = empty_fcall_info_cache; BG(user_compare_fci) = empty_fcall_info; BG(user_compare_fci_cache) = empty_fcall_info_cache; BG(page_uid) = -1; @@ -1472,7 +1470,7 @@ PHPAPI int _php_error_log_ex(int opt_err, const char *message, size_t message_le return FAILURE; case 3: /*save to a file */ - stream = php_stream_open_wrapper(opt, "a", IGNORE_URL_WIN | REPORT_ERRORS, NULL); + stream = php_stream_open_wrapper(opt, "a", REPORT_ERRORS, NULL); if (!stream) { return FAILURE; } @@ -1953,12 +1951,8 @@ PHP_FUNCTION(highlight_string) hicompiled_string_description = zend_make_compiled_string_description("highlighted code"); - // TODO: Accept zend_string in highlight_string API. - zval str_zv; - ZVAL_STR_COPY(&str_zv, str); - highlight_string(&str_zv, &syntax_highlighter_ini, hicompiled_string_description); + highlight_string(str, &syntax_highlighter_ini, hicompiled_string_description); efree(hicompiled_string_description); - zval_ptr_dtor(&str_zv); EG(error_reporting) = old_error_reporting; diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h index 97faf50fd9..34b2570175 100644 --- a/ext/standard/basic_functions.h +++ b/ext/standard/basic_functions.h @@ -66,8 +66,6 @@ typedef struct _php_basic_globals { char *strtok_last; char strtok_table[256]; size_t strtok_len; - zend_fcall_info array_walk_fci; - zend_fcall_info_cache array_walk_fci_cache; zend_fcall_info user_compare_fci; zend_fcall_info_cache user_compare_fci_cache; zend_llist *user_tick_functions; diff --git a/ext/standard/mail.c b/ext/standard/mail.c index 3080a3957b..4dfbfb03d0 100644 --- a/ext/standard/mail.c +++ b/ext/standard/mail.c @@ -371,7 +371,7 @@ void php_mail_log_to_syslog(char *message) { void php_mail_log_to_file(char *filename, char *message, size_t message_size) { /* Write 'message' to the given file. */ - uint32_t flags = IGNORE_URL_WIN | REPORT_ERRORS | STREAM_DISABLE_OPEN_BASEDIR; + uint32_t flags = REPORT_ERRORS | STREAM_DISABLE_OPEN_BASEDIR; php_stream *stream = php_stream_open_wrapper(filename, "a", flags, NULL); if (stream) { php_stream_write(stream, message, message_size); diff --git a/ext/standard/php_http.h b/ext/standard/php_http.h index 1df941ee00..3f764c18a6 100644 --- a/ext/standard/php_http.h +++ b/ext/standard/php_http.h @@ -25,6 +25,5 @@ PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr, const char *key_prefix, size_t key_prefix_len, const char *key_suffix, size_t key_suffix_len, zval *type, const char *arg_sep, int enc_type); -#define php_url_encode_hash(ht, formstr) php_url_encode_hash_ex((ht), (formstr), NULL, 0, NULL, 0, NULL, 0, NULL) #endif diff --git a/ext/standard/tests/file/realpath_bug77484.phpt b/ext/standard/tests/file/realpath_bug77484.phpt index 85595d09e3..9aa3a335c2 100644 --- a/ext/standard/tests/file/realpath_bug77484.phpt +++ b/ext/standard/tests/file/realpath_bug77484.phpt @@ -9,6 +9,10 @@ if (PHP_ZTS) { /* TODO eliminate difference in TS build. */ die("skip Not for ZTS"); } +if (getenv('SKIP_REPEAT')) { + /* The cwd is persistent across repeats */ + die("skip Not repeatable"); +} ?> --FILE-- <?php diff --git a/ext/standard/tests/general_functions/http_response_code.phpt b/ext/standard/tests/general_functions/http_response_code.phpt index bc2775f3d3..ab290c3cef 100644 --- a/ext/standard/tests/general_functions/http_response_code.phpt +++ b/ext/standard/tests/general_functions/http_response_code.phpt @@ -2,6 +2,15 @@ Test http_response_code basic functionality --CREDITS-- Gabriel Caruso (carusogabriel@php.net) +--SKIPIF-- +<?php +if (getenv('SKIP_REPEAT')) { + /* The http_response_code leaks across repeats. Technically that's a bug, but it's something + * that only affects the CLI repeat option, where the response code is not meaningful in the + * first place. Other SAPIs will properly reset the response code for each request. */ + die('skip Not repeatable'); +} +?> --FILE-- <?php var_dump( diff --git a/ext/standard/tests/general_functions/proc_nice_basic.phpt b/ext/standard/tests/general_functions/proc_nice_basic.phpt index b8cc3cd128..17bca0f7b7 100644 --- a/ext/standard/tests/general_functions/proc_nice_basic.phpt +++ b/ext/standard/tests/general_functions/proc_nice_basic.phpt @@ -25,7 +25,7 @@ if ($exit_code !== 0) { else return -1; } - $delta = 10; + $delta = 5; $pid = getmypid(); $niceBefore = getNice($pid); proc_nice($delta); diff --git a/ext/standard/tests/streams/bug64433.phpt b/ext/standard/tests/streams/bug64433.phpt index 56af241837..53fecc57f9 100644 --- a/ext/standard/tests/streams/bug64433.phpt +++ b/ext/standard/tests/streams/bug64433.phpt @@ -9,8 +9,6 @@ if(!$res) { die("skip could not open cli server script"); } ?> ---CONFLICTS-- -server --FILE-- <?php include __DIR__."/../../../../sapi/cli/tests/php_cli_server.inc"; diff --git a/ext/standard/tests/url/get_headers_error_003.phpt b/ext/standard/tests/url/get_headers_error_003.phpt index a8edc2cb21..7ee0b9e210 100644 --- a/ext/standard/tests/url/get_headers_error_003.phpt +++ b/ext/standard/tests/url/get_headers_error_003.phpt @@ -1,7 +1,5 @@ --TEST-- Test get_headers() function : test with context ---CONFLICTS-- -server --FILE-- <?php diff --git a/main/main.c b/main/main.c index d2d19a5ee8..8ab7c55067 100644 --- a/main/main.c +++ b/main/main.c @@ -1443,7 +1443,7 @@ PHP_FUNCTION(set_time_limit) /* {{{ php_fopen_wrapper_for_zend */ static FILE *php_fopen_wrapper_for_zend(const char *filename, zend_string **opened_path) { - return php_stream_open_wrapper_as_file((char *)filename, "rb", USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path); + return php_stream_open_wrapper_as_file((char *)filename, "rb", USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path); } /* }}} */ diff --git a/main/output.c b/main/output.c index d155123834..bdeca894f2 100644 --- a/main/output.c +++ b/main/output.c @@ -103,20 +103,20 @@ static size_t (*php_output_direct)(const char *str, size_t str_len) = php_output static void php_output_header(void) { if (!SG(headers_sent)) { - if (!OG(output_start_filename_str)) { + if (!OG(output_start_filename)) { if (zend_is_compiling()) { - OG(output_start_filename_str) = zend_get_compiled_filename(); + OG(output_start_filename) = zend_get_compiled_filename(); OG(output_start_lineno) = zend_get_compiled_lineno(); } else if (zend_is_executing()) { - OG(output_start_filename_str) = zend_get_executed_filename_ex(); + OG(output_start_filename) = zend_get_executed_filename_ex(); OG(output_start_lineno) = zend_get_executed_lineno(); } - if (OG(output_start_filename_str)) { - zend_string_addref(OG(output_start_filename_str)); + if (OG(output_start_filename)) { + zend_string_addref(OG(output_start_filename)); } #if PHP_OUTPUT_DEBUG fprintf(stderr, "!!! output started at: %s (%d)\n", - ZSTR_VAL(OG(output_start_filename_str)), OG(output_start_lineno)); + ZSTR_VAL(OG(output_start_filename)), OG(output_start_lineno)); #endif } if (!php_header()) { @@ -195,9 +195,9 @@ PHPAPI void php_output_deactivate(void) zend_stack_destroy(&OG(handlers)); } - if (OG(output_start_filename_str)) { - zend_string_release(OG(output_start_filename_str)); - OG(output_start_filename_str) = NULL; + if (OG(output_start_filename)) { + zend_string_release(OG(output_start_filename)); + OG(output_start_filename) = NULL; } } /* }}} */ @@ -758,7 +758,7 @@ PHPAPI void php_output_set_implicit_flush(int flush) * Get the file name where output has started */ PHPAPI const char *php_output_get_start_filename(void) { - return OG(output_start_filename_str) ? ZSTR_VAL(OG(output_start_filename_str)) : NULL; + return OG(output_start_filename) ? ZSTR_VAL(OG(output_start_filename)) : NULL; } /* }}} */ diff --git a/main/php.h b/main/php.h index f796577249..68076befde 100644 --- a/main/php.h +++ b/main/php.h @@ -22,7 +22,7 @@ #include <dmalloc.h> #endif -#define PHP_API_VERSION 20200930 +#define PHP_API_VERSION 20201009 #define PHP_HAVE_STREAMS #define YYDEBUG 0 #define PHP_DEFAULT_CHARSET "UTF-8" diff --git a/main/php_network.h b/main/php_network.h index 437069b4fc..5c8cee3fa8 100644 --- a/main/php_network.h +++ b/main/php_network.h @@ -49,6 +49,13 @@ # define EWOULDBLOCK EAGAIN #endif +/* This is a work around for GCC bug 69602: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602 */ +#if EAGAIN != EWOULDBLOCK +# define PHP_IS_TRANSIENT_ERROR(err) (err == EAGAIN || err == EWOULDBLOCK) +#else +# define PHP_IS_TRANSIENT_ERROR(err) (err == EAGAIN) +#endif + #ifdef PHP_WIN32 #define php_socket_errno() WSAGetLastError() #else diff --git a/main/php_output.h b/main/php_output.h index eba63e6039..18f611dece 100644 --- a/main/php_output.h +++ b/main/php_output.h @@ -137,10 +137,9 @@ ZEND_BEGIN_MODULE_GLOBALS(output) zend_stack handlers; php_output_handler *active; php_output_handler *running; - const char *output_start_filename; /* TODO: Unused, remove */ + zend_string *output_start_filename; int output_start_lineno; int flags; - zend_string *output_start_filename_str; ZEND_END_MODULE_GLOBALS(output) PHPAPI ZEND_EXTERN_MODULE_GLOBALS(output) diff --git a/main/php_streams.h b/main/php_streams.h index 73740a7a79..1bd6668607 100644 --- a/main/php_streams.h +++ b/main/php_streams.h @@ -550,9 +550,6 @@ END_EXTERN_C() /* Allow blocking reads on anonymous pipes on Windows. */ #define STREAM_USE_BLOCKING_PIPE 0x00008000 -/* Antique - no longer has meaning */ -#define IGNORE_URL_WIN 0 - int php_init_stream_wrappers(int module_number); int php_shutdown_stream_wrappers(int module_number); void php_shutdown_stream_hashes(void); diff --git a/main/php_version.h b/main/php_version.h index 7da21cab4a..66d4367856 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -1,8 +1,8 @@ /* automatically generated by configure */ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 8 -#define PHP_MINOR_VERSION 0 -#define PHP_RELEASE_VERSION 1 +#define PHP_MINOR_VERSION 1 +#define PHP_RELEASE_VERSION 0 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.0.1-dev" -#define PHP_VERSION_ID 80001 +#define PHP_VERSION "8.1.0-dev" +#define PHP_VERSION_ID 80100 diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index 8a891ddf72..0373cc4c94 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -351,7 +351,7 @@ static ssize_t php_stdiop_write(php_stream *stream, const char *buf, size_t coun ssize_t bytes_written = write(data->fd, buf, count); #endif if (bytes_written < 0) { - if (errno == EWOULDBLOCK || errno == EAGAIN) { + if (PHP_IS_TRANSIENT_ERROR(errno)) { return 0; } if (errno == EINTR) { @@ -420,7 +420,7 @@ static ssize_t php_stdiop_read(php_stream *stream, char *buf, size_t count) } if (ret < 0) { - if (errno == EWOULDBLOCK || errno == EAGAIN) { + if (PHP_IS_TRANSIENT_ERROR(errno)) { /* Not an error. */ ret = 0; } else if (errno == EINTR) { diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index f3370e89f7..cd67fcb8ca 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -75,7 +75,8 @@ retry: if (didwrite <= 0) { char *estr; int err = php_socket_errno(); - if (err == EWOULDBLOCK || err == EAGAIN) { + + if (PHP_IS_TRANSIENT_ERROR(err)) { if (sock->is_blocked) { int retval; @@ -166,7 +167,7 @@ static ssize_t php_sockop_read(php_stream *stream, char *buf, size_t count) err = php_socket_errno(); if (nr_bytes < 0) { - if (err == EAGAIN || err == EWOULDBLOCK) { + if (PHP_IS_TRANSIENT_ERROR(err)) { nr_bytes = 0; } else { stream->eof = 1; diff --git a/php.ini-development b/php.ini-development index 9eed34c6ac..b4193ca67a 100644 --- a/php.ini-development +++ b/php.ini-development @@ -17,7 +17,7 @@ ; 6. The directory from the --with-config-file-path compile time option, or the ; Windows directory (usually C:\windows) ; See the PHP docs for more specific information. -; http://php.net/configuration.file +; https://php.net/configuration.file ; The syntax of the file is extremely simple. Whitespace and lines ; beginning with a semicolon are silently ignored (as you probably guessed). @@ -31,7 +31,7 @@ ; special sections cannot be overridden by user-defined INI files or ; at runtime. Currently, [PATH=] and [HOST=] sections only work under ; CGI/FastCGI. -; http://php.net/ini.sections +; https://php.net/ini.sections ; Directives are specified using the following syntax: ; directive = value @@ -181,7 +181,7 @@ ;;;;;;;;;;;;;;;;;;;; ; Enable the PHP scripting language engine under Apache. -; http://php.net/engine +; https://php.net/engine engine = On ; This directive determines whether or not PHP will recognize code between @@ -194,11 +194,11 @@ engine = On ; Default Value: On ; Development Value: Off ; Production Value: Off -; http://php.net/short-open-tag +; https://php.net/short-open-tag short_open_tag = Off ; The number of significant digits displayed in floating point numbers. -; http://php.net/precision +; https://php.net/precision precision = 14 ; Output buffering is a mechanism for controlling how much output data @@ -222,7 +222,7 @@ precision = 14 ; Default Value: Off ; Development Value: 4096 ; Production Value: 4096 -; http://php.net/output-buffering +; https://php.net/output-buffering output_buffering = 4096 ; You can redirect all of the output of your scripts to a function. For @@ -237,7 +237,7 @@ output_buffering = 4096 ; and you cannot use both "ob_gzhandler" and "zlib.output_compression". ; Note: output_handler must be empty if this is set 'On' !!!! ; Instead you must use zlib.output_handler. -; http://php.net/output-handler +; https://php.net/output-handler ;output_handler = ; URL rewriter function rewrites URL on the fly by using @@ -266,16 +266,16 @@ output_buffering = 4096 ; performance, enable output_buffering in addition. ; Note: You need to use zlib.output_handler instead of the standard ; output_handler, or otherwise the output will be corrupted. -; http://php.net/zlib.output-compression +; https://php.net/zlib.output-compression zlib.output_compression = Off -; http://php.net/zlib.output-compression-level +; https://php.net/zlib.output-compression-level ;zlib.output_compression_level = -1 ; You cannot specify additional output handlers if zlib.output_compression ; is activated here. This setting does the same as output_handler but in ; a different order. -; http://php.net/zlib.output-handler +; https://php.net/zlib.output-handler ;zlib.output_handler = ; Implicit flush tells PHP to tell the output layer to flush itself @@ -283,7 +283,7 @@ zlib.output_compression = Off ; PHP function flush() after each and every call to print() or echo() and each ; and every HTML block. Turning this option on has serious performance ; implications and is generally recommended for debugging purposes only. -; http://php.net/implicit-flush +; https://php.net/implicit-flush ; Note: This directive is hardcoded to On for the CLI SAPI implicit_flush = Off @@ -314,22 +314,22 @@ serialize_precision = -1 ; and below. This directive makes most sense if used in a per-directory ; or per-virtualhost web server configuration file. ; Note: disables the realpath cache -; http://php.net/open-basedir +; https://php.net/open-basedir ;open_basedir = ; This directive allows you to disable certain functions. ; It receives a comma-delimited list of function names. -; http://php.net/disable-functions +; https://php.net/disable-functions disable_functions = ; This directive allows you to disable certain classes. ; It receives a comma-delimited list of class names. -; http://php.net/disable-classes +; https://php.net/disable-classes disable_classes = ; Colors for Syntax Highlighting mode. Anything that's acceptable in ; <span style="color: ???????"> would work. -; http://php.net/syntax-highlighting +; https://php.net/syntax-highlighting ;highlight.string = #DD0000 ;highlight.comment = #FF9900 ;highlight.keyword = #007700 @@ -340,24 +340,24 @@ disable_classes = ; the request. Consider enabling it if executing long requests, which may end up ; being interrupted by the user or a browser timing out. PHP's default behavior ; is to disable this feature. -; http://php.net/ignore-user-abort +; https://php.net/ignore-user-abort ;ignore_user_abort = On ; Determines the size of the realpath cache to be used by PHP. This value should ; be increased on systems where PHP opens many files to reflect the quantity of ; the file operations performed. ; Note: if open_basedir is set, the cache is disabled -; http://php.net/realpath-cache-size +; https://php.net/realpath-cache-size ;realpath_cache_size = 4096k ; Duration of time, in seconds for which to cache realpath information for a given ; file or directory. For systems with rarely changing files, consider increasing this ; value. -; http://php.net/realpath-cache-ttl +; https://php.net/realpath-cache-ttl ;realpath_cache_ttl = 120 ; Enables or disables the circular reference collector. -; http://php.net/zend.enable-gc +; https://php.net/zend.enable-gc zend.enable_gc = On ; If enabled, scripts may be written in encodings that are incompatible with @@ -394,7 +394,7 @@ zend.exception_string_param_max_len = 15 ; (e.g. by adding its signature to the Web server header). It is no security ; threat in any way, but it makes it possible to determine whether you use PHP ; on your server or not. -; http://php.net/expose-php +; https://php.net/expose-php expose_php = On ;;;;;;;;;;;;;;;;;;; @@ -402,7 +402,7 @@ expose_php = On ;;;;;;;;;;;;;;;;;;; ; Maximum execution time of each script, in seconds -; http://php.net/max-execution-time +; https://php.net/max-execution-time ; Note: This directive is hardcoded to 0 for the CLI SAPI max_execution_time = 30 @@ -413,18 +413,18 @@ max_execution_time = 30 ; Default Value: -1 (Unlimited) ; Development Value: 60 (60 seconds) ; Production Value: 60 (60 seconds) -; http://php.net/max-input-time +; https://php.net/max-input-time max_input_time = 60 ; Maximum input variable nesting level -; http://php.net/max-input-nesting-level +; https://php.net/max-input-nesting-level ;max_input_nesting_level = 64 ; How many GET/POST/COOKIE input variables may be accepted ;max_input_vars = 1000 ; Maximum amount of memory a script may consume -; http://php.net/memory-limit +; https://php.net/memory-limit memory_limit = 128M ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -480,7 +480,7 @@ memory_limit = 128M ; Default Value: E_ALL ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT -; http://php.net/error-reporting +; https://php.net/error-reporting error_reporting = E_ALL ; This directive controls whether or not and where PHP will output errors, @@ -497,7 +497,7 @@ error_reporting = E_ALL ; Default Value: On ; Development Value: On ; Production Value: Off -; http://php.net/display-errors +; https://php.net/display-errors display_errors = On ; The display of errors which occur during PHP's startup sequence are handled @@ -506,7 +506,7 @@ display_errors = On ; Default Value: On ; Development Value: On ; Production Value: Off -; http://php.net/display-startup-errors +; https://php.net/display-startup-errors display_startup_errors = On ; Besides displaying errors, PHP can also log errors to locations such as a @@ -516,36 +516,36 @@ display_startup_errors = On ; Default Value: Off ; Development Value: On ; Production Value: On -; http://php.net/log-errors +; https://php.net/log-errors log_errors = On ; Set maximum length of log_errors. In error_log information about the source is ; added. The default is 1024 and 0 allows to not apply any maximum length at all. -; http://php.net/log-errors-max-len +; https://php.net/log-errors-max-len log_errors_max_len = 1024 ; Do not log repeated messages. Repeated errors must occur in same file on same ; line unless ignore_repeated_source is set true. -; http://php.net/ignore-repeated-errors +; https://php.net/ignore-repeated-errors ignore_repeated_errors = Off ; Ignore source of message when ignoring repeated messages. When this setting ; is On you will not log errors with repeated messages from different files or ; source lines. -; http://php.net/ignore-repeated-source +; https://php.net/ignore-repeated-source ignore_repeated_source = Off ; If this parameter is set to Off, then memory leaks will not be shown (on ; stdout or in the log). This is only effective in a debug compile, and if ; error reporting includes E_WARNING in the allowed list -; http://php.net/report-memleaks +; https://php.net/report-memleaks report_memleaks = On ; This setting is off by default. ;report_zend_debug = 0 ; Turn off normal error reporting and emit XML-RPC error XML -; http://php.net/xmlrpc-errors +; https://php.net/xmlrpc-errors ;xmlrpc_errors = 0 ; An XML-RPC faultCode @@ -555,40 +555,40 @@ report_memleaks = On ; error message as HTML for easier reading. This directive controls whether ; the error message is formatted as HTML or not. ; Note: This directive is hardcoded to Off for the CLI SAPI -; http://php.net/html-errors +; https://php.net/html-errors ;html_errors = On ; If html_errors is set to On *and* docref_root is not empty, then PHP ; produces clickable error messages that direct to a page describing the error ; or function causing the error in detail. -; You can download a copy of the PHP manual from http://php.net/docs +; You can download a copy of the PHP manual from https://php.net/docs ; and change docref_root to the base URL of your local copy including the ; leading '/'. You must also specify the file extension being used including ; the dot. PHP's default behavior is to leave these settings empty, in which ; case no links to documentation are generated. ; Note: Never use this feature for production boxes. -; http://php.net/docref-root +; https://php.net/docref-root ; Examples ;docref_root = "/phpmanual/" -; http://php.net/docref-ext +; https://php.net/docref-ext ;docref_ext = .html ; String to output before an error message. PHP's default behavior is to leave ; this setting blank. -; http://php.net/error-prepend-string +; https://php.net/error-prepend-string ; Example: ;error_prepend_string = "<span style='color: #ff0000'>" ; String to output after an error message. PHP's default behavior is to leave ; this setting blank. -; http://php.net/error-append-string +; https://php.net/error-append-string ; Example: ;error_append_string = "</span>" ; Log errors to specified file. PHP's default behavior is to leave this value ; empty. -; http://php.net/error-log +; https://php.net/error-log ; Example: ;error_log = php_errors.log ; Log errors to syslog (Event Log on Windows). @@ -611,7 +611,7 @@ report_memleaks = On ; no-ctrl (all characters except control characters) ; all (all characters) ; raw (like "all", but messages are not split at newlines) -; http://php.net/syslog.filter +; https://php.net/syslog.filter ;syslog.filter = ascii ;windows.show_crt_warning @@ -625,14 +625,14 @@ report_memleaks = On ; The separator used in PHP generated URLs to separate arguments. ; PHP's default setting is "&". -; http://php.net/arg-separator.output +; https://php.net/arg-separator.output ; Example: ;arg_separator.output = "&" ; List of separator(s) used by PHP to parse input URLs into variables. ; PHP's default setting is "&". ; NOTE: Every character in this directive is considered as separator! -; http://php.net/arg-separator.input +; https://php.net/arg-separator.input ; Example: ;arg_separator.input = ";&" @@ -646,7 +646,7 @@ report_memleaks = On ; Default Value: "EGPCS" ; Development Value: "GPCS" ; Production Value: "GPCS"; -; http://php.net/variables-order +; https://php.net/variables-order variables_order = "GPCS" ; This directive determines which super global data (G,P & C) should be @@ -659,7 +659,7 @@ variables_order = "GPCS" ; Default Value: None ; Development Value: "GP" ; Production Value: "GP" -; http://php.net/request-order +; https://php.net/request-order request_order = "GP" ; This directive determines whether PHP registers $argv & $argc each time it @@ -674,7 +674,7 @@ request_order = "GP" ; Default Value: On ; Development Value: Off ; Production Value: Off -; http://php.net/register-argc-argv +; https://php.net/register-argc-argv register_argc_argv = Off ; When enabled, the ENV, REQUEST and SERVER variables are created when they're @@ -682,7 +682,7 @@ register_argc_argv = Off ; variables are not used within a script, having this directive on will result ; in a performance gain. The PHP directive register_argc_argv must be disabled ; for this directive to have any effect. -; http://php.net/auto-globals-jit +; https://php.net/auto-globals-jit auto_globals_jit = On ; Whether PHP will read the POST data. @@ -691,48 +691,48 @@ auto_globals_jit = On ; and $_FILES to always be empty; the only way you will be able to read the ; POST data will be through the php://input stream wrapper. This can be useful ; to proxy requests or to process the POST data in a memory efficient fashion. -; http://php.net/enable-post-data-reading +; https://php.net/enable-post-data-reading ;enable_post_data_reading = Off ; Maximum size of POST data that PHP will accept. ; Its value may be 0 to disable the limit. It is ignored if POST data reading ; is disabled through enable_post_data_reading. -; http://php.net/post-max-size +; https://php.net/post-max-size post_max_size = 8M ; Automatically add files before PHP document. -; http://php.net/auto-prepend-file +; https://php.net/auto-prepend-file auto_prepend_file = ; Automatically add files after PHP document. -; http://php.net/auto-append-file +; https://php.net/auto-append-file auto_append_file = ; By default, PHP will output a media type using the Content-Type header. To ; disable this, simply set it to be empty. ; ; PHP's built-in default media type is set to text/html. -; http://php.net/default-mimetype +; https://php.net/default-mimetype default_mimetype = "text/html" ; PHP's default character set is set to UTF-8. -; http://php.net/default-charset +; https://php.net/default-charset default_charset = "UTF-8" ; PHP internal character encoding is set to empty. ; If empty, default_charset is used. -; http://php.net/internal-encoding +; https://php.net/internal-encoding ;internal_encoding = ; PHP input character encoding is set to empty. ; If empty, default_charset is used. -; http://php.net/input-encoding +; https://php.net/input-encoding ;input_encoding = ; PHP output character encoding is set to empty. ; If empty, default_charset is used. ; See also output_buffer. -; http://php.net/output-encoding +; https://php.net/output-encoding ;output_encoding = ;;;;;;;;;;;;;;;;;;;;;;;;; @@ -746,23 +746,23 @@ default_charset = "UTF-8" ;include_path = ".;c:\php\includes" ; ; PHP's default setting for include_path is ".;/path/to/php/pear" -; http://php.net/include-path +; https://php.net/include-path ; The root of the PHP pages, used only if nonempty. ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root ; if you are running php as a CGI under any web server (other than IIS) ; see documentation for security issues. The alternate is to use the ; cgi.force_redirect configuration below -; http://php.net/doc-root +; https://php.net/doc-root doc_root = ; The directory under which PHP opens the script using /~username used only ; if nonempty. -; http://php.net/user-dir +; https://php.net/user-dir user_dir = ; Directory in which the loadable extensions (modules) reside. -; http://php.net/extension-dir +; https://php.net/extension-dir ;extension_dir = "./" ; On windows: ;extension_dir = "ext" @@ -774,14 +774,14 @@ user_dir = ; Whether or not to enable the dl() function. The dl() function does NOT work ; properly in multithreaded servers, such as IIS or Zeus, and is automatically ; disabled on them. -; http://php.net/enable-dl +; https://php.net/enable-dl enable_dl = Off ; cgi.force_redirect is necessary to provide security running PHP as a CGI under ; most web servers. Left undefined, PHP turns this on by default. You can ; turn it off here AT YOUR OWN RISK ; **You CAN safely turn this off for IIS, in fact, you MUST.** -; http://php.net/cgi.force-redirect +; https://php.net/cgi.force-redirect ;cgi.force_redirect = 1 ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with @@ -792,7 +792,7 @@ enable_dl = Off ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP ; will look for to know it is OK to continue execution. Setting this variable MAY ; cause security issues, KNOW WHAT YOU ARE DOING FIRST. -; http://php.net/cgi.redirect-status-env +; https://php.net/cgi.redirect-status-env ;cgi.redirect_status_env = ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's @@ -801,7 +801,7 @@ enable_dl = Off ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. -; http://php.net/cgi.fix-pathinfo +; https://php.net/cgi.fix-pathinfo ;cgi.fix_pathinfo=1 ; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside @@ -813,7 +813,7 @@ enable_dl = Off ; security context that the request runs under. mod_fastcgi under Apache ; does not currently support this feature (03/17/2002) ; Set to 1 if running under IIS. Default is zero. -; http://php.net/fastcgi.impersonate +; https://php.net/fastcgi.impersonate ;fastcgi.impersonate = 1 ; Disable logging through FastCGI connection. PHP's default behavior is to enable @@ -825,14 +825,14 @@ enable_dl = Off ; is supported by Apache. When this option is set to 1, PHP will send ; RFC2616 compliant header. ; Default is zero. -; http://php.net/cgi.rfc2616-headers +; https://php.net/cgi.rfc2616-headers ;cgi.rfc2616_headers = 0 ; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #! ; (shebang) at the top of the running script. This line might be needed if the ; script support running both as stand-alone script and via PHP CGI<. PHP in CGI ; mode skips this line and ignores its content if this directive is turned on. -; http://php.net/cgi.check-shebang-line +; https://php.net/cgi.check-shebang-line ;cgi.check_shebang_line=1 ;;;;;;;;;;;;;;;; @@ -840,16 +840,16 @@ enable_dl = Off ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. -; http://php.net/file-uploads +; https://php.net/file-uploads file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). -; http://php.net/upload-tmp-dir +; https://php.net/upload-tmp-dir ;upload_tmp_dir = ; Maximum allowed size for uploaded files. -; http://php.net/upload-max-filesize +; https://php.net/upload-max-filesize upload_max_filesize = 2M ; Maximum number of files that can be uploaded via a single request @@ -860,24 +860,24 @@ max_file_uploads = 20 ;;;;;;;;;;;;;;;;;; ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. -; http://php.net/allow-url-fopen +; https://php.net/allow-url-fopen allow_url_fopen = On -; Whether to allow include/require to open URLs (like http:// or ftp://) as files. -; http://php.net/allow-url-include +; Whether to allow include/require to open URLs (like https:// or ftp://) as files. +; https://php.net/allow-url-include allow_url_include = Off ; Define the anonymous ftp password (your email address). PHP's default setting ; for this is empty. -; http://php.net/from +; https://php.net/from ;from="john@doe.com" ; Define the User-Agent string. PHP's default setting for this is empty. -; http://php.net/user-agent +; https://php.net/user-agent ;user_agent="PHP" ; Default timeout for socket based streams (seconds) -; http://php.net/default-socket-timeout +; https://php.net/default-socket-timeout default_socket_timeout = 60 ; If your scripts have to deal with files from Macintosh systems, @@ -885,7 +885,7 @@ default_socket_timeout = 60 ; unix or win32 systems, setting this flag will cause PHP to ; automatically detect the EOL character in those files so that ; fgets() and file() will work regardless of the source of the file. -; http://php.net/auto-detect-line-endings +; https://php.net/auto-detect-line-endings ;auto_detect_line_endings = Off ;;;;;;;;;;;;;;;;;;;;;; @@ -944,7 +944,7 @@ default_socket_timeout = 60 ;extension=shmop ; The MIBS data available in the PHP distribution must be installed. -; See http://www.php.net/manual/en/snmp.installation.php +; See https://www.php.net/manual/en/snmp.installation.php ;extension=snmp ;extension=soap @@ -966,26 +966,26 @@ cli_server.color = On [Date] ; Defines the default timezone used by the date functions -; http://php.net/date.timezone +; https://php.net/date.timezone ;date.timezone = -; http://php.net/date.default-latitude +; https://php.net/date.default-latitude ;date.default_latitude = 31.7667 -; http://php.net/date.default-longitude +; https://php.net/date.default-longitude ;date.default_longitude = 35.2333 -; http://php.net/date.sunrise-zenith +; https://php.net/date.sunrise-zenith ;date.sunrise_zenith = 90.833333 -; http://php.net/date.sunset-zenith +; https://php.net/date.sunset-zenith ;date.sunset_zenith = 90.833333 [filter] -; http://php.net/filter.default +; https://php.net/filter.default ;filter.default = unsafe_raw -; http://php.net/filter.default-flags +; https://php.net/filter.default-flags ;filter.default_flags = [iconv] @@ -1023,7 +1023,7 @@ cli_server.color = On [sqlite3] ; Directory pointing to SQLite3 extensions -; http://php.net/sqlite3.extension-dir +; https://php.net/sqlite3.extension-dir ;sqlite3.extension_dir = ; SQLite defensive mode flag (only available from SQLite 3.26+) @@ -1037,14 +1037,14 @@ cli_server.color = On [Pcre] ; PCRE library backtracking limit. -; http://php.net/pcre.backtrack-limit +; https://php.net/pcre.backtrack-limit ;pcre.backtrack_limit=100000 ; PCRE library recursion limit. ; Please note that if you set this value to a high number you may consume all ; the available process stack and eventually crash PHP (due to reaching the ; stack size limit imposed by the Operating System). -; http://php.net/pcre.recursion-limit +; https://php.net/pcre.recursion-limit ;pcre.recursion_limit=100000 ; Enables or disables JIT compilation of patterns. This requires the PCRE @@ -1053,7 +1053,7 @@ cli_server.color = On [Pdo] ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" -; http://php.net/pdo-odbc.connection-pooling +; https://php.net/pdo-odbc.connection-pooling ;pdo_odbc.connection_pooling=strict [Pdo_mysql] @@ -1062,27 +1062,27 @@ cli_server.color = On pdo_mysql.default_socket= [Phar] -; http://php.net/phar.readonly +; https://php.net/phar.readonly ;phar.readonly = On -; http://php.net/phar.require-hash +; https://php.net/phar.require-hash ;phar.require_hash = On ;phar.cache_list = [mail function] ; For Win32 only. -; http://php.net/smtp +; https://php.net/smtp SMTP = localhost -; http://php.net/smtp-port +; https://php.net/smtp-port smtp_port = 25 ; For Win32 only. -; http://php.net/sendmail-from +; https://php.net/sendmail-from ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). -; http://php.net/sendmail-path +; https://php.net/sendmail-path ;sendmail_path = ; Force the addition of the specified parameters to be passed as extra parameters @@ -1100,13 +1100,13 @@ mail.add_x_header = Off ;mail.log = syslog [ODBC] -; http://php.net/odbc.default-db +; https://php.net/odbc.default-db ;odbc.default_db = Not yet implemented -; http://php.net/odbc.default-user +; https://php.net/odbc.default-user ;odbc.default_user = Not yet implemented -; http://php.net/odbc.default-pw +; https://php.net/odbc.default-pw ;odbc.default_pw = Not yet implemented ; Controls the ODBC cursor model. @@ -1114,68 +1114,68 @@ mail.add_x_header = Off ;odbc.default_cursortype ; Allow or prevent persistent links. -; http://php.net/odbc.allow-persistent +; https://php.net/odbc.allow-persistent odbc.allow_persistent = On ; Check that a connection is still valid before reuse. -; http://php.net/odbc.check-persistent +; https://php.net/odbc.check-persistent odbc.check_persistent = On ; Maximum number of persistent links. -1 means no limit. -; http://php.net/odbc.max-persistent +; https://php.net/odbc.max-persistent odbc.max_persistent = -1 ; Maximum number of links (persistent + non-persistent). -1 means no limit. -; http://php.net/odbc.max-links +; https://php.net/odbc.max-links odbc.max_links = -1 ; Handling of LONG fields. Returns number of bytes to variables. 0 means ; passthru. -; http://php.net/odbc.defaultlrl +; https://php.net/odbc.defaultlrl odbc.defaultlrl = 4096 ; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation ; of odbc.defaultlrl and odbc.defaultbinmode -; http://php.net/odbc.defaultbinmode +; https://php.net/odbc.defaultbinmode odbc.defaultbinmode = 1 [MySQLi] ; Maximum number of persistent links. -1 means no limit. -; http://php.net/mysqli.max-persistent +; https://php.net/mysqli.max-persistent mysqli.max_persistent = -1 ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements -; http://php.net/mysqli.allow_local_infile +; https://php.net/mysqli.allow_local_infile ;mysqli.allow_local_infile = On ; Allow or prevent persistent links. -; http://php.net/mysqli.allow-persistent +; https://php.net/mysqli.allow-persistent mysqli.allow_persistent = On ; Maximum number of links. -1 means no limit. -; http://php.net/mysqli.max-links +; https://php.net/mysqli.max-links mysqli.max_links = -1 ; Default port number for mysqli_connect(). If unset, mysqli_connect() will use ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look ; at MYSQL_PORT. -; http://php.net/mysqli.default-port +; https://php.net/mysqli.default-port mysqli.default_port = 3306 ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. -; http://php.net/mysqli.default-socket +; https://php.net/mysqli.default-socket mysqli.default_socket = ; Default host for mysqli_connect() (doesn't apply in safe mode). -; http://php.net/mysqli.default-host +; https://php.net/mysqli.default-host mysqli.default_host = ; Default user for mysqli_connect() (doesn't apply in safe mode). -; http://php.net/mysqli.default-user +; https://php.net/mysqli.default-user mysqli.default_user = ; Default password for mysqli_connect() (doesn't apply in safe mode). @@ -1183,7 +1183,7 @@ mysqli.default_user = ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") ; and reveal this password! And of course, any users with read access to this ; file will be able to reveal the password as well. -; http://php.net/mysqli.default-pw +; https://php.net/mysqli.default-pw mysqli.default_pw = ; Allow or prevent reconnect @@ -1200,7 +1200,7 @@ mysqlnd.collect_memory_statistics = On ; Records communication from all extensions using mysqlnd to the specified log ; file. -; http://php.net/mysqlnd.debug +; https://php.net/mysqlnd.debug ;mysqlnd.debug = ; Defines which queries will be logged. @@ -1227,25 +1227,25 @@ mysqlnd.collect_memory_statistics = On ; Connection: Enables privileged connections using external ; credentials (OCI_SYSOPER, OCI_SYSDBA) -; http://php.net/oci8.privileged-connect +; https://php.net/oci8.privileged-connect ;oci8.privileged_connect = Off ; Connection: The maximum number of persistent OCI8 connections per ; process. Using -1 means no limit. -; http://php.net/oci8.max-persistent +; https://php.net/oci8.max-persistent ;oci8.max_persistent = -1 ; Connection: The maximum number of seconds a process is allowed to ; maintain an idle persistent connection. Using -1 means idle ; persistent connections will be maintained forever. -; http://php.net/oci8.persistent-timeout +; https://php.net/oci8.persistent-timeout ;oci8.persistent_timeout = -1 ; Connection: The number of seconds that must pass before issuing a ; ping during oci_pconnect() to check the connection validity. When ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables ; pings completely. -; http://php.net/oci8.ping-interval +; https://php.net/oci8.ping-interval ;oci8.ping_interval = 60 ; Connection: Set this to a user chosen connection class to be used @@ -1263,59 +1263,59 @@ mysqlnd.collect_memory_statistics = On ; Tuning: This option enables statement caching, and specifies how ; many statements to cache. Using 0 disables statement caching. -; http://php.net/oci8.statement-cache-size +; https://php.net/oci8.statement-cache-size ;oci8.statement_cache_size = 20 ; Tuning: Enables statement prefetching and sets the default number of ; rows that will be fetched automatically after statement execution. -; http://php.net/oci8.default-prefetch +; https://php.net/oci8.default-prefetch ;oci8.default_prefetch = 100 ; Compatibility. Using On means oci_close() will not close ; oci_connect() and oci_new_connect() connections. -; http://php.net/oci8.old-oci-close-semantics +; https://php.net/oci8.old-oci-close-semantics ;oci8.old_oci_close_semantics = Off [PostgreSQL] ; Allow or prevent persistent links. -; http://php.net/pgsql.allow-persistent +; https://php.net/pgsql.allow-persistent pgsql.allow_persistent = On ; Detect broken persistent links always with pg_pconnect(). ; Auto reset feature requires a little overheads. -; http://php.net/pgsql.auto-reset-persistent +; https://php.net/pgsql.auto-reset-persistent pgsql.auto_reset_persistent = Off ; Maximum number of persistent links. -1 means no limit. -; http://php.net/pgsql.max-persistent +; https://php.net/pgsql.max-persistent pgsql.max_persistent = -1 ; Maximum number of links (persistent+non persistent). -1 means no limit. -; http://php.net/pgsql.max-links +; https://php.net/pgsql.max-links pgsql.max_links = -1 ; Ignore PostgreSQL backends Notice message or not. ; Notice message logging require a little overheads. -; http://php.net/pgsql.ignore-notice +; https://php.net/pgsql.ignore-notice pgsql.ignore_notice = 0 ; Log PostgreSQL backends Notice message or not. ; Unless pgsql.ignore_notice=0, module cannot log notice message. -; http://php.net/pgsql.log-notice +; https://php.net/pgsql.log-notice pgsql.log_notice = 0 [bcmath] ; Number of decimal digits for all bcmath functions. -; http://php.net/bcmath.scale +; https://php.net/bcmath.scale bcmath.scale = 0 [browscap] -; http://php.net/browscap +; https://php.net/browscap ;browscap = extra/browscap.ini [Session] ; Handler used to store/retrieve data. -; http://php.net/session.save-handler +; https://php.net/session.save-handler session.save_handler = files ; Argument passed to save_handler. In the case of files, this is the path @@ -1344,7 +1344,7 @@ session.save_handler = files ; ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the process's umask. -; http://php.net/session.save-path +; https://php.net/session.save-path ;session.save_path = "/tmp" ; Whether to use strict session mode. @@ -1357,42 +1357,42 @@ session.save_handler = files session.use_strict_mode = 0 ; Whether to use cookies. -; http://php.net/session.use-cookies +; https://php.net/session.use-cookies session.use_cookies = 1 -; http://php.net/session.cookie-secure +; https://php.net/session.cookie-secure ;session.cookie_secure = ; This option forces PHP to fetch and use a cookie for storing and maintaining ; the session id. We encourage this operation as it's very helpful in combating ; session hijacking when not specifying and managing your own session id. It is ; not the be-all and end-all of session hijacking defense, but it's a good start. -; http://php.net/session.use-only-cookies +; https://php.net/session.use-only-cookies session.use_only_cookies = 1 ; Name of the session (used as cookie name). -; http://php.net/session.name +; https://php.net/session.name session.name = PHPSESSID ; Initialize session on request startup. -; http://php.net/session.auto-start +; https://php.net/session.auto-start session.auto_start = 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. -; http://php.net/session.cookie-lifetime +; https://php.net/session.cookie-lifetime session.cookie_lifetime = 0 ; The path for which the cookie is valid. -; http://php.net/session.cookie-path +; https://php.net/session.cookie-path session.cookie_path = / ; The domain for which the cookie is valid. -; http://php.net/session.cookie-domain +; https://php.net/session.cookie-domain session.cookie_domain = ; Whether or not to add the httpOnly flag to the cookie, which makes it ; inaccessible to browser scripting languages such as JavaScript. -; http://php.net/session.cookie-httponly +; https://php.net/session.cookie-httponly session.cookie_httponly = ; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) @@ -1402,7 +1402,7 @@ session.cookie_httponly = session.cookie_samesite = ; Handler used to serialize data. php is the standard serializer of PHP. -; http://php.net/session.serialize-handler +; https://php.net/session.serialize-handler session.serialize_handler = php ; Defines the probability that the 'garbage collection' process is started on every @@ -1411,7 +1411,7 @@ session.serialize_handler = php ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 -; http://php.net/session.gc-probability +; https://php.net/session.gc-probability session.gc_probability = 1 ; Defines the probability that the 'garbage collection' process is started on every @@ -1421,12 +1421,12 @@ session.gc_probability = 1 ; Default Value: 100 ; Development Value: 1000 ; Production Value: 1000 -; http://php.net/session.gc-divisor +; https://php.net/session.gc-divisor session.gc_divisor = 1000 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. -; http://php.net/session.gc-maxlifetime +; https://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440 ; NOTE: If you are using the subdirectory option for storing session files @@ -1440,16 +1440,16 @@ session.gc_maxlifetime = 1440 ; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. -; http://php.net/session.referer-check +; https://php.net/session.referer-check session.referer_check = ; Set to {nocache,private,public,} to determine HTTP caching aspects ; or leave this empty to avoid sending anti-caching headers. -; http://php.net/session.cache-limiter +; https://php.net/session.cache-limiter session.cache_limiter = nocache ; Document expires after n minutes. -; http://php.net/session.cache-expire +; https://php.net/session.cache-expire session.cache_expire = 180 ; trans sid support is disabled by default. @@ -1461,13 +1461,13 @@ session.cache_expire = 180 ; in publicly accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. -; http://php.net/session.use-trans-sid +; https://php.net/session.use-trans-sid session.use_trans_sid = 0 ; Set session ID character length. This value could be between 22 to 256. ; Shorter length than default is supported only for compatibility reason. ; Users should use 32 or more chars. -; http://php.net/session.sid-length +; https://php.net/session.sid-length ; Default Value: 32 ; Development Value: 26 ; Production Value: 26 @@ -1482,7 +1482,7 @@ session.sid_length = 26 ; Default Value: "a=href,area=href,frame=src,form=" ; Development Value: "a=href,area=href,frame=src,form=" ; Production Value: "a=href,area=href,frame=src,form=" -; http://php.net/url-rewriter.tags +; https://php.net/url-rewriter.tags session.trans_sid_tags = "a=href,area=href,frame=src,form=" ; URL rewriter does not rewrite absolute URLs by default. @@ -1507,14 +1507,14 @@ session.trans_sid_tags = "a=href,area=href,frame=src,form=" ; Default Value: 4 ; Development Value: 5 ; Production Value: 5 -; http://php.net/session.hash-bits-per-character +; https://php.net/session.hash-bits-per-character session.sid_bits_per_character = 5 ; Enable upload progress tracking in $_SESSION ; Default Value: On ; Development Value: On ; Production Value: On -; http://php.net/session.upload-progress.enabled +; https://php.net/session.upload-progress.enabled ;session.upload_progress.enabled = On ; Cleanup the progress information as soon as all POST data has been read @@ -1522,14 +1522,14 @@ session.sid_bits_per_character = 5 ; Default Value: On ; Development Value: On ; Production Value: On -; http://php.net/session.upload-progress.cleanup +; https://php.net/session.upload-progress.cleanup ;session.upload_progress.cleanup = On ; A prefix used for the upload progress key in $_SESSION ; Default Value: "upload_progress_" ; Development Value: "upload_progress_" ; Production Value: "upload_progress_" -; http://php.net/session.upload-progress.prefix +; https://php.net/session.upload-progress.prefix ;session.upload_progress.prefix = "upload_progress_" ; The index name (concatenated with the prefix) in $_SESSION @@ -1537,7 +1537,7 @@ session.sid_bits_per_character = 5 ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" -; http://php.net/session.upload-progress.name +; https://php.net/session.upload-progress.name ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" ; How frequently the upload progress should be updated. @@ -1545,18 +1545,18 @@ session.sid_bits_per_character = 5 ; Default Value: "1%" ; Development Value: "1%" ; Production Value: "1%" -; http://php.net/session.upload-progress.freq +; https://php.net/session.upload-progress.freq ;session.upload_progress.freq = "1%" ; The minimum delay between updates, in seconds ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 -; http://php.net/session.upload-progress.min-freq +; https://php.net/session.upload-progress.min-freq ;session.upload_progress.min_freq = "1" ; Only write session data when session data is changed. Enabled by default. -; http://php.net/session.lazy-write +; https://php.net/session.lazy-write ;session.lazy_write = On [Assertion] @@ -1568,48 +1568,48 @@ session.sid_bits_per_character = 5 ; Default Value: 1 ; Development Value: 1 ; Production Value: -1 -; http://php.net/zend.assertions +; https://php.net/zend.assertions zend.assertions = 1 ; Assert(expr); active by default. -; http://php.net/assert.active +; https://php.net/assert.active ;assert.active = On ; Throw an AssertionError on failed assertions -; http://php.net/assert.exception +; https://php.net/assert.exception ;assert.exception = On ; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) -; http://php.net/assert.warning +; https://php.net/assert.warning ;assert.warning = On ; Don't bail out by default. -; http://php.net/assert.bail +; https://php.net/assert.bail ;assert.bail = Off ; User-function to be called if an assertion fails. -; http://php.net/assert.callback +; https://php.net/assert.callback ;assert.callback = 0 [COM] ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs -; http://php.net/com.typelib-file +; https://php.net/com.typelib-file ;com.typelib_file = ; allow Distributed-COM calls -; http://php.net/com.allow-dcom +; https://php.net/com.allow-dcom ;com.allow_dcom = true ; autoregister constants of a component's typlib on com_load() -; http://php.net/com.autoregister-typelib +; https://php.net/com.autoregister-typelib ;com.autoregister_typelib = true ; register constants casesensitive -; http://php.net/com.autoregister-casesensitive +; https://php.net/com.autoregister-casesensitive ;com.autoregister_casesensitive = false ; show warnings on duplicate constant registrations -; http://php.net/com.autoregister-verbose +; https://php.net/com.autoregister-verbose ;com.autoregister_verbose = true ; The default character set code-page to use when passing strings to and from COM objects. @@ -1623,7 +1623,7 @@ zend.assertions = 1 [mbstring] ; language for internal character representation. ; This affects mb_send_mail() and mbstring.detect_order. -; http://php.net/mbstring.language +; https://php.net/mbstring.language ;mbstring.language = Japanese ; Use of this INI entry is deprecated, use global internal_encoding instead. @@ -1638,7 +1638,7 @@ zend.assertions = 1 ; mbstring.encoding_translation = On is needed to use this setting. ; If empty, default_charset or input_encoding or mbstring.input is used. ; The precedence is: default_charset < input_encoding < mbstring.http_input -; http://php.net/mbstring.http-input +; https://php.net/mbstring.http-input ;mbstring.http_input = ; Use of this INI entry is deprecated, use global output_encoding instead. @@ -1648,7 +1648,7 @@ zend.assertions = 1 ; The precedence is: default_charset < output_encoding < mbstring.http_output ; To use an output encoding conversion, mbstring's output handler must be set ; otherwise output encoding conversion cannot be performed. -; http://php.net/mbstring.http-output +; https://php.net/mbstring.http-output ;mbstring.http_output = ; enable automatic encoding translation according to @@ -1656,17 +1656,17 @@ zend.assertions = 1 ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. -; http://php.net/mbstring.encoding-translation +; https://php.net/mbstring.encoding-translation ;mbstring.encoding_translation = Off ; automatic encoding detection order. ; "auto" detect order is changed according to mbstring.language -; http://php.net/mbstring.detect-order +; https://php.net/mbstring.detect-order ;mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another -; http://php.net/mbstring.substitute-character +; https://php.net/mbstring.substitute-character ;mbstring.substitute_character = none ; Enable strict encoding detection. @@ -1689,7 +1689,7 @@ zend.assertions = 1 ; Tell the jpeg decode to ignore warnings and try to create ; a gd image. The warning will then be displayed as notices ; disabled by default -; http://php.net/gd.jpeg-ignore-warning +; https://php.net/gd.jpeg-ignore-warning ;gd.jpeg_ignore_warning = 1 [exif] @@ -1698,47 +1698,47 @@ zend.assertions = 1 ; given by corresponding encode setting. When empty mbstring.internal_encoding ; is used. For the decode settings you can distinguish between motorola and ; intel byte order. A decode setting cannot be empty. -; http://php.net/exif.encode-unicode +; https://php.net/exif.encode-unicode ;exif.encode_unicode = ISO-8859-15 -; http://php.net/exif.decode-unicode-motorola +; https://php.net/exif.decode-unicode-motorola ;exif.decode_unicode_motorola = UCS-2BE -; http://php.net/exif.decode-unicode-intel +; https://php.net/exif.decode-unicode-intel ;exif.decode_unicode_intel = UCS-2LE -; http://php.net/exif.encode-jis +; https://php.net/exif.encode-jis ;exif.encode_jis = -; http://php.net/exif.decode-jis-motorola +; https://php.net/exif.decode-jis-motorola ;exif.decode_jis_motorola = JIS -; http://php.net/exif.decode-jis-intel +; https://php.net/exif.decode-jis-intel ;exif.decode_jis_intel = JIS [Tidy] ; The path to a default tidy configuration file to use when using tidy -; http://php.net/tidy.default-config +; https://php.net/tidy.default-config ;tidy.default_config = /usr/local/lib/php/default.tcfg ; Should tidy clean and repair output automatically? ; WARNING: Do not use this option if you are generating non-html content ; such as dynamic images -; http://php.net/tidy.clean-output +; https://php.net/tidy.clean-output tidy.clean_output = Off [soap] ; Enables or disables WSDL caching feature. -; http://php.net/soap.wsdl-cache-enabled +; https://php.net/soap.wsdl-cache-enabled soap.wsdl_cache_enabled=1 ; Sets the directory name where SOAP extension will put cache files. -; http://php.net/soap.wsdl-cache-dir +; https://php.net/soap.wsdl-cache-dir soap.wsdl_cache_dir="/tmp" ; (time to live) Sets the number of second while cached file will be used ; instead of original one. -; http://php.net/soap.wsdl-cache-ttl +; https://php.net/soap.wsdl-cache-ttl soap.wsdl_cache_ttl=86400 ; Sets the size of the cache limit. (Max. number of WSDL files to cache) @@ -1893,12 +1893,12 @@ ldap.max_links = -1 ; Specifies a PHP script that is going to be compiled and executed at server ; start-up. -; http://php.net/opcache.preload +; https://php.net/opcache.preload ;opcache.preload= ; Preloading code as root is not allowed for security reasons. This directive ; facilitates to let the preloading to be run as another user. -; http://php.net/opcache.preload_user +; https://php.net/opcache.preload_user ;opcache.preload_user= ; Prevents caching files that are less than this number of seconds old. It diff --git a/php.ini-production b/php.ini-production index 281272e3db..15ecc4530e 100644 --- a/php.ini-production +++ b/php.ini-production @@ -17,7 +17,7 @@ ; 6. The directory from the --with-config-file-path compile time option, or the ; Windows directory (usually C:\windows) ; See the PHP docs for more specific information. -; http://php.net/configuration.file +; https://php.net/configuration.file ; The syntax of the file is extremely simple. Whitespace and lines ; beginning with a semicolon are silently ignored (as you probably guessed). @@ -31,7 +31,7 @@ ; special sections cannot be overridden by user-defined INI files or ; at runtime. Currently, [PATH=] and [HOST=] sections only work under ; CGI/FastCGI. -; http://php.net/ini.sections +; https://php.net/ini.sections ; Directives are specified using the following syntax: ; directive = value @@ -181,7 +181,7 @@ ;;;;;;;;;;;;;;;;;;;; ; Enable the PHP scripting language engine under Apache. -; http://php.net/engine +; https://php.net/engine engine = On ; This directive determines whether or not PHP will recognize code between @@ -194,11 +194,11 @@ engine = On ; Default Value: On ; Development Value: Off ; Production Value: Off -; http://php.net/short-open-tag +; https://php.net/short-open-tag short_open_tag = Off ; The number of significant digits displayed in floating point numbers. -; http://php.net/precision +; https://php.net/precision precision = 14 ; Output buffering is a mechanism for controlling how much output data @@ -222,7 +222,7 @@ precision = 14 ; Default Value: Off ; Development Value: 4096 ; Production Value: 4096 -; http://php.net/output-buffering +; https://php.net/output-buffering output_buffering = 4096 ; You can redirect all of the output of your scripts to a function. For @@ -237,7 +237,7 @@ output_buffering = 4096 ; and you cannot use both "ob_gzhandler" and "zlib.output_compression". ; Note: output_handler must be empty if this is set 'On' !!!! ; Instead you must use zlib.output_handler. -; http://php.net/output-handler +; https://php.net/output-handler ;output_handler = ; URL rewriter function rewrites URL on the fly by using @@ -266,16 +266,16 @@ output_buffering = 4096 ; performance, enable output_buffering in addition. ; Note: You need to use zlib.output_handler instead of the standard ; output_handler, or otherwise the output will be corrupted. -; http://php.net/zlib.output-compression +; https://php.net/zlib.output-compression zlib.output_compression = Off -; http://php.net/zlib.output-compression-level +; https://php.net/zlib.output-compression-level ;zlib.output_compression_level = -1 ; You cannot specify additional output handlers if zlib.output_compression ; is activated here. This setting does the same as output_handler but in ; a different order. -; http://php.net/zlib.output-handler +; https://php.net/zlib.output-handler ;zlib.output_handler = ; Implicit flush tells PHP to tell the output layer to flush itself @@ -283,7 +283,7 @@ zlib.output_compression = Off ; PHP function flush() after each and every call to print() or echo() and each ; and every HTML block. Turning this option on has serious performance ; implications and is generally recommended for debugging purposes only. -; http://php.net/implicit-flush +; https://php.net/implicit-flush ; Note: This directive is hardcoded to On for the CLI SAPI implicit_flush = Off @@ -314,22 +314,22 @@ serialize_precision = -1 ; and below. This directive makes most sense if used in a per-directory ; or per-virtualhost web server configuration file. ; Note: disables the realpath cache -; http://php.net/open-basedir +; https://php.net/open-basedir ;open_basedir = ; This directive allows you to disable certain functions. ; It receives a comma-delimited list of function names. -; http://php.net/disable-functions +; https://php.net/disable-functions disable_functions = ; This directive allows you to disable certain classes. ; It receives a comma-delimited list of class names. -; http://php.net/disable-classes +; https://php.net/disable-classes disable_classes = ; Colors for Syntax Highlighting mode. Anything that's acceptable in ; <span style="color: ???????"> would work. -; http://php.net/syntax-highlighting +; https://php.net/syntax-highlighting ;highlight.string = #DD0000 ;highlight.comment = #FF9900 ;highlight.keyword = #007700 @@ -340,24 +340,24 @@ disable_classes = ; the request. Consider enabling it if executing long requests, which may end up ; being interrupted by the user or a browser timing out. PHP's default behavior ; is to disable this feature. -; http://php.net/ignore-user-abort +; https://php.net/ignore-user-abort ;ignore_user_abort = On ; Determines the size of the realpath cache to be used by PHP. This value should ; be increased on systems where PHP opens many files to reflect the quantity of ; the file operations performed. ; Note: if open_basedir is set, the cache is disabled -; http://php.net/realpath-cache-size +; https://php.net/realpath-cache-size ;realpath_cache_size = 4096k ; Duration of time, in seconds for which to cache realpath information for a given ; file or directory. For systems with rarely changing files, consider increasing this ; value. -; http://php.net/realpath-cache-ttl +; https://php.net/realpath-cache-ttl ;realpath_cache_ttl = 120 ; Enables or disables the circular reference collector. -; http://php.net/zend.enable-gc +; https://php.net/zend.enable-gc zend.enable_gc = On ; If enabled, scripts may be written in encodings that are incompatible with @@ -396,7 +396,7 @@ zend.exception_string_param_max_len = 0 ; (e.g. by adding its signature to the Web server header). It is no security ; threat in any way, but it makes it possible to determine whether you use PHP ; on your server or not. -; http://php.net/expose-php +; https://php.net/expose-php expose_php = On ;;;;;;;;;;;;;;;;;;; @@ -404,7 +404,7 @@ expose_php = On ;;;;;;;;;;;;;;;;;;; ; Maximum execution time of each script, in seconds -; http://php.net/max-execution-time +; https://php.net/max-execution-time ; Note: This directive is hardcoded to 0 for the CLI SAPI max_execution_time = 30 @@ -415,18 +415,18 @@ max_execution_time = 30 ; Default Value: -1 (Unlimited) ; Development Value: 60 (60 seconds) ; Production Value: 60 (60 seconds) -; http://php.net/max-input-time +; https://php.net/max-input-time max_input_time = 60 ; Maximum input variable nesting level -; http://php.net/max-input-nesting-level +; https://php.net/max-input-nesting-level ;max_input_nesting_level = 64 ; How many GET/POST/COOKIE input variables may be accepted ;max_input_vars = 1000 ; Maximum amount of memory a script may consume -; http://php.net/memory-limit +; https://php.net/memory-limit memory_limit = 128M ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -482,7 +482,7 @@ memory_limit = 128M ; Default Value: E_ALL ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT -; http://php.net/error-reporting +; https://php.net/error-reporting error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ; This directive controls whether or not and where PHP will output errors, @@ -499,7 +499,7 @@ error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ; Default Value: On ; Development Value: On ; Production Value: Off -; http://php.net/display-errors +; https://php.net/display-errors display_errors = Off ; The display of errors which occur during PHP's startup sequence are handled @@ -508,7 +508,7 @@ display_errors = Off ; Default Value: On ; Development Value: On ; Production Value: Off -; http://php.net/display-startup-errors +; https://php.net/display-startup-errors display_startup_errors = Off ; Besides displaying errors, PHP can also log errors to locations such as a @@ -518,36 +518,36 @@ display_startup_errors = Off ; Default Value: Off ; Development Value: On ; Production Value: On -; http://php.net/log-errors +; https://php.net/log-errors log_errors = On ; Set maximum length of log_errors. In error_log information about the source is ; added. The default is 1024 and 0 allows to not apply any maximum length at all. -; http://php.net/log-errors-max-len +; https://php.net/log-errors-max-len log_errors_max_len = 1024 ; Do not log repeated messages. Repeated errors must occur in same file on same ; line unless ignore_repeated_source is set true. -; http://php.net/ignore-repeated-errors +; https://php.net/ignore-repeated-errors ignore_repeated_errors = Off ; Ignore source of message when ignoring repeated messages. When this setting ; is On you will not log errors with repeated messages from different files or ; source lines. -; http://php.net/ignore-repeated-source +; https://php.net/ignore-repeated-source ignore_repeated_source = Off ; If this parameter is set to Off, then memory leaks will not be shown (on ; stdout or in the log). This is only effective in a debug compile, and if ; error reporting includes E_WARNING in the allowed list -; http://php.net/report-memleaks +; https://php.net/report-memleaks report_memleaks = On ; This setting is off by default. ;report_zend_debug = 0 ; Turn off normal error reporting and emit XML-RPC error XML -; http://php.net/xmlrpc-errors +; https://php.net/xmlrpc-errors ;xmlrpc_errors = 0 ; An XML-RPC faultCode @@ -557,40 +557,40 @@ report_memleaks = On ; error message as HTML for easier reading. This directive controls whether ; the error message is formatted as HTML or not. ; Note: This directive is hardcoded to Off for the CLI SAPI -; http://php.net/html-errors +; https://php.net/html-errors ;html_errors = On ; If html_errors is set to On *and* docref_root is not empty, then PHP ; produces clickable error messages that direct to a page describing the error ; or function causing the error in detail. -; You can download a copy of the PHP manual from http://php.net/docs +; You can download a copy of the PHP manual from https://php.net/docs ; and change docref_root to the base URL of your local copy including the ; leading '/'. You must also specify the file extension being used including ; the dot. PHP's default behavior is to leave these settings empty, in which ; case no links to documentation are generated. ; Note: Never use this feature for production boxes. -; http://php.net/docref-root +; https://php.net/docref-root ; Examples ;docref_root = "/phpmanual/" -; http://php.net/docref-ext +; https://php.net/docref-ext ;docref_ext = .html ; String to output before an error message. PHP's default behavior is to leave ; this setting blank. -; http://php.net/error-prepend-string +; https://php.net/error-prepend-string ; Example: ;error_prepend_string = "<span style='color: #ff0000'>" ; String to output after an error message. PHP's default behavior is to leave ; this setting blank. -; http://php.net/error-append-string +; https://php.net/error-append-string ; Example: ;error_append_string = "</span>" ; Log errors to specified file. PHP's default behavior is to leave this value ; empty. -; http://php.net/error-log +; https://php.net/error-log ; Example: ;error_log = php_errors.log ; Log errors to syslog (Event Log on Windows). @@ -613,7 +613,7 @@ report_memleaks = On ; no-ctrl (all characters except control characters) ; all (all characters) ; raw (like "all", but messages are not split at newlines) -; http://php.net/syslog.filter +; https://php.net/syslog.filter ;syslog.filter = ascii ;windows.show_crt_warning @@ -627,14 +627,14 @@ report_memleaks = On ; The separator used in PHP generated URLs to separate arguments. ; PHP's default setting is "&". -; http://php.net/arg-separator.output +; https://php.net/arg-separator.output ; Example: ;arg_separator.output = "&" ; List of separator(s) used by PHP to parse input URLs into variables. ; PHP's default setting is "&". ; NOTE: Every character in this directive is considered as separator! -; http://php.net/arg-separator.input +; https://php.net/arg-separator.input ; Example: ;arg_separator.input = ";&" @@ -648,7 +648,7 @@ report_memleaks = On ; Default Value: "EGPCS" ; Development Value: "GPCS" ; Production Value: "GPCS"; -; http://php.net/variables-order +; https://php.net/variables-order variables_order = "GPCS" ; This directive determines which super global data (G,P & C) should be @@ -661,7 +661,7 @@ variables_order = "GPCS" ; Default Value: None ; Development Value: "GP" ; Production Value: "GP" -; http://php.net/request-order +; https://php.net/request-order request_order = "GP" ; This directive determines whether PHP registers $argv & $argc each time it @@ -676,7 +676,7 @@ request_order = "GP" ; Default Value: On ; Development Value: Off ; Production Value: Off -; http://php.net/register-argc-argv +; https://php.net/register-argc-argv register_argc_argv = Off ; When enabled, the ENV, REQUEST and SERVER variables are created when they're @@ -684,7 +684,7 @@ register_argc_argv = Off ; variables are not used within a script, having this directive on will result ; in a performance gain. The PHP directive register_argc_argv must be disabled ; for this directive to have any effect. -; http://php.net/auto-globals-jit +; https://php.net/auto-globals-jit auto_globals_jit = On ; Whether PHP will read the POST data. @@ -693,48 +693,48 @@ auto_globals_jit = On ; and $_FILES to always be empty; the only way you will be able to read the ; POST data will be through the php://input stream wrapper. This can be useful ; to proxy requests or to process the POST data in a memory efficient fashion. -; http://php.net/enable-post-data-reading +; https://php.net/enable-post-data-reading ;enable_post_data_reading = Off ; Maximum size of POST data that PHP will accept. ; Its value may be 0 to disable the limit. It is ignored if POST data reading ; is disabled through enable_post_data_reading. -; http://php.net/post-max-size +; https://php.net/post-max-size post_max_size = 8M ; Automatically add files before PHP document. -; http://php.net/auto-prepend-file +; https://php.net/auto-prepend-file auto_prepend_file = ; Automatically add files after PHP document. -; http://php.net/auto-append-file +; https://php.net/auto-append-file auto_append_file = ; By default, PHP will output a media type using the Content-Type header. To ; disable this, simply set it to be empty. ; ; PHP's built-in default media type is set to text/html. -; http://php.net/default-mimetype +; https://php.net/default-mimetype default_mimetype = "text/html" ; PHP's default character set is set to UTF-8. -; http://php.net/default-charset +; https://php.net/default-charset default_charset = "UTF-8" ; PHP internal character encoding is set to empty. ; If empty, default_charset is used. -; http://php.net/internal-encoding +; https://php.net/internal-encoding ;internal_encoding = ; PHP input character encoding is set to empty. ; If empty, default_charset is used. -; http://php.net/input-encoding +; https://php.net/input-encoding ;input_encoding = ; PHP output character encoding is set to empty. ; If empty, default_charset is used. ; See also output_buffer. -; http://php.net/output-encoding +; https://php.net/output-encoding ;output_encoding = ;;;;;;;;;;;;;;;;;;;;;;;;; @@ -748,23 +748,23 @@ default_charset = "UTF-8" ;include_path = ".;c:\php\includes" ; ; PHP's default setting for include_path is ".;/path/to/php/pear" -; http://php.net/include-path +; https://php.net/include-path ; The root of the PHP pages, used only if nonempty. ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root ; if you are running php as a CGI under any web server (other than IIS) ; see documentation for security issues. The alternate is to use the ; cgi.force_redirect configuration below -; http://php.net/doc-root +; https://php.net/doc-root doc_root = ; The directory under which PHP opens the script using /~username used only ; if nonempty. -; http://php.net/user-dir +; https://php.net/user-dir user_dir = ; Directory in which the loadable extensions (modules) reside. -; http://php.net/extension-dir +; https://php.net/extension-dir ;extension_dir = "./" ; On windows: ;extension_dir = "ext" @@ -776,14 +776,14 @@ user_dir = ; Whether or not to enable the dl() function. The dl() function does NOT work ; properly in multithreaded servers, such as IIS or Zeus, and is automatically ; disabled on them. -; http://php.net/enable-dl +; https://php.net/enable-dl enable_dl = Off ; cgi.force_redirect is necessary to provide security running PHP as a CGI under ; most web servers. Left undefined, PHP turns this on by default. You can ; turn it off here AT YOUR OWN RISK ; **You CAN safely turn this off for IIS, in fact, you MUST.** -; http://php.net/cgi.force-redirect +; https://php.net/cgi.force-redirect ;cgi.force_redirect = 1 ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with @@ -794,7 +794,7 @@ enable_dl = Off ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP ; will look for to know it is OK to continue execution. Setting this variable MAY ; cause security issues, KNOW WHAT YOU ARE DOING FIRST. -; http://php.net/cgi.redirect-status-env +; https://php.net/cgi.redirect-status-env ;cgi.redirect_status_env = ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's @@ -803,7 +803,7 @@ enable_dl = Off ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. -; http://php.net/cgi.fix-pathinfo +; https://php.net/cgi.fix-pathinfo ;cgi.fix_pathinfo=1 ; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside @@ -815,7 +815,7 @@ enable_dl = Off ; security context that the request runs under. mod_fastcgi under Apache ; does not currently support this feature (03/17/2002) ; Set to 1 if running under IIS. Default is zero. -; http://php.net/fastcgi.impersonate +; https://php.net/fastcgi.impersonate ;fastcgi.impersonate = 1 ; Disable logging through FastCGI connection. PHP's default behavior is to enable @@ -827,14 +827,14 @@ enable_dl = Off ; is supported by Apache. When this option is set to 1, PHP will send ; RFC2616 compliant header. ; Default is zero. -; http://php.net/cgi.rfc2616-headers +; https://php.net/cgi.rfc2616-headers ;cgi.rfc2616_headers = 0 ; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #! ; (shebang) at the top of the running script. This line might be needed if the ; script support running both as stand-alone script and via PHP CGI<. PHP in CGI ; mode skips this line and ignores its content if this directive is turned on. -; http://php.net/cgi.check-shebang-line +; https://php.net/cgi.check-shebang-line ;cgi.check_shebang_line=1 ;;;;;;;;;;;;;;;; @@ -842,16 +842,16 @@ enable_dl = Off ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. -; http://php.net/file-uploads +; https://php.net/file-uploads file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). -; http://php.net/upload-tmp-dir +; https://php.net/upload-tmp-dir ;upload_tmp_dir = ; Maximum allowed size for uploaded files. -; http://php.net/upload-max-filesize +; https://php.net/upload-max-filesize upload_max_filesize = 2M ; Maximum number of files that can be uploaded via a single request @@ -862,24 +862,24 @@ max_file_uploads = 20 ;;;;;;;;;;;;;;;;;; ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. -; http://php.net/allow-url-fopen +; https://php.net/allow-url-fopen allow_url_fopen = On -; Whether to allow include/require to open URLs (like http:// or ftp://) as files. -; http://php.net/allow-url-include +; Whether to allow include/require to open URLs (like https:// or ftp://) as files. +; https://php.net/allow-url-include allow_url_include = Off ; Define the anonymous ftp password (your email address). PHP's default setting ; for this is empty. -; http://php.net/from +; https://php.net/from ;from="john@doe.com" ; Define the User-Agent string. PHP's default setting for this is empty. -; http://php.net/user-agent +; https://php.net/user-agent ;user_agent="PHP" ; Default timeout for socket based streams (seconds) -; http://php.net/default-socket-timeout +; https://php.net/default-socket-timeout default_socket_timeout = 60 ; If your scripts have to deal with files from Macintosh systems, @@ -887,7 +887,7 @@ default_socket_timeout = 60 ; unix or win32 systems, setting this flag will cause PHP to ; automatically detect the EOL character in those files so that ; fgets() and file() will work regardless of the source of the file. -; http://php.net/auto-detect-line-endings +; https://php.net/auto-detect-line-endings ;auto_detect_line_endings = Off ;;;;;;;;;;;;;;;;;;;;;; @@ -946,7 +946,7 @@ default_socket_timeout = 60 ;extension=shmop ; The MIBS data available in the PHP distribution must be installed. -; See http://www.php.net/manual/en/snmp.installation.php +; See https://www.php.net/manual/en/snmp.installation.php ;extension=snmp ;extension=soap @@ -968,26 +968,26 @@ cli_server.color = On [Date] ; Defines the default timezone used by the date functions -; http://php.net/date.timezone +; https://php.net/date.timezone ;date.timezone = -; http://php.net/date.default-latitude +; https://php.net/date.default-latitude ;date.default_latitude = 31.7667 -; http://php.net/date.default-longitude +; https://php.net/date.default-longitude ;date.default_longitude = 35.2333 -; http://php.net/date.sunrise-zenith +; https://php.net/date.sunrise-zenith ;date.sunrise_zenith = 90.833333 -; http://php.net/date.sunset-zenith +; https://php.net/date.sunset-zenith ;date.sunset_zenith = 90.833333 [filter] -; http://php.net/filter.default +; https://php.net/filter.default ;filter.default = unsafe_raw -; http://php.net/filter.default-flags +; https://php.net/filter.default-flags ;filter.default_flags = [iconv] @@ -1025,7 +1025,7 @@ cli_server.color = On [sqlite3] ; Directory pointing to SQLite3 extensions -; http://php.net/sqlite3.extension-dir +; https://php.net/sqlite3.extension-dir ;sqlite3.extension_dir = ; SQLite defensive mode flag (only available from SQLite 3.26+) @@ -1039,14 +1039,14 @@ cli_server.color = On [Pcre] ; PCRE library backtracking limit. -; http://php.net/pcre.backtrack-limit +; https://php.net/pcre.backtrack-limit ;pcre.backtrack_limit=100000 ; PCRE library recursion limit. ; Please note that if you set this value to a high number you may consume all ; the available process stack and eventually crash PHP (due to reaching the ; stack size limit imposed by the Operating System). -; http://php.net/pcre.recursion-limit +; https://php.net/pcre.recursion-limit ;pcre.recursion_limit=100000 ; Enables or disables JIT compilation of patterns. This requires the PCRE @@ -1055,7 +1055,7 @@ cli_server.color = On [Pdo] ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" -; http://php.net/pdo-odbc.connection-pooling +; https://php.net/pdo-odbc.connection-pooling ;pdo_odbc.connection_pooling=strict [Pdo_mysql] @@ -1064,27 +1064,27 @@ cli_server.color = On pdo_mysql.default_socket= [Phar] -; http://php.net/phar.readonly +; https://php.net/phar.readonly ;phar.readonly = On -; http://php.net/phar.require-hash +; https://php.net/phar.require-hash ;phar.require_hash = On ;phar.cache_list = [mail function] ; For Win32 only. -; http://php.net/smtp +; https://php.net/smtp SMTP = localhost -; http://php.net/smtp-port +; https://php.net/smtp-port smtp_port = 25 ; For Win32 only. -; http://php.net/sendmail-from +; https://php.net/sendmail-from ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). -; http://php.net/sendmail-path +; https://php.net/sendmail-path ;sendmail_path = ; Force the addition of the specified parameters to be passed as extra parameters @@ -1102,13 +1102,13 @@ mail.add_x_header = Off ;mail.log = syslog [ODBC] -; http://php.net/odbc.default-db +; https://php.net/odbc.default-db ;odbc.default_db = Not yet implemented -; http://php.net/odbc.default-user +; https://php.net/odbc.default-user ;odbc.default_user = Not yet implemented -; http://php.net/odbc.default-pw +; https://php.net/odbc.default-pw ;odbc.default_pw = Not yet implemented ; Controls the ODBC cursor model. @@ -1116,68 +1116,68 @@ mail.add_x_header = Off ;odbc.default_cursortype ; Allow or prevent persistent links. -; http://php.net/odbc.allow-persistent +; https://php.net/odbc.allow-persistent odbc.allow_persistent = On ; Check that a connection is still valid before reuse. -; http://php.net/odbc.check-persistent +; https://php.net/odbc.check-persistent odbc.check_persistent = On ; Maximum number of persistent links. -1 means no limit. -; http://php.net/odbc.max-persistent +; https://php.net/odbc.max-persistent odbc.max_persistent = -1 ; Maximum number of links (persistent + non-persistent). -1 means no limit. -; http://php.net/odbc.max-links +; https://php.net/odbc.max-links odbc.max_links = -1 ; Handling of LONG fields. Returns number of bytes to variables. 0 means ; passthru. -; http://php.net/odbc.defaultlrl +; https://php.net/odbc.defaultlrl odbc.defaultlrl = 4096 ; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation ; of odbc.defaultlrl and odbc.defaultbinmode -; http://php.net/odbc.defaultbinmode +; https://php.net/odbc.defaultbinmode odbc.defaultbinmode = 1 [MySQLi] ; Maximum number of persistent links. -1 means no limit. -; http://php.net/mysqli.max-persistent +; https://php.net/mysqli.max-persistent mysqli.max_persistent = -1 ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements -; http://php.net/mysqli.allow_local_infile +; https://php.net/mysqli.allow_local_infile ;mysqli.allow_local_infile = On ; Allow or prevent persistent links. -; http://php.net/mysqli.allow-persistent +; https://php.net/mysqli.allow-persistent mysqli.allow_persistent = On ; Maximum number of links. -1 means no limit. -; http://php.net/mysqli.max-links +; https://php.net/mysqli.max-links mysqli.max_links = -1 ; Default port number for mysqli_connect(). If unset, mysqli_connect() will use ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look ; at MYSQL_PORT. -; http://php.net/mysqli.default-port +; https://php.net/mysqli.default-port mysqli.default_port = 3306 ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. -; http://php.net/mysqli.default-socket +; https://php.net/mysqli.default-socket mysqli.default_socket = ; Default host for mysqli_connect() (doesn't apply in safe mode). -; http://php.net/mysqli.default-host +; https://php.net/mysqli.default-host mysqli.default_host = ; Default user for mysqli_connect() (doesn't apply in safe mode). -; http://php.net/mysqli.default-user +; https://php.net/mysqli.default-user mysqli.default_user = ; Default password for mysqli_connect() (doesn't apply in safe mode). @@ -1185,7 +1185,7 @@ mysqli.default_user = ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") ; and reveal this password! And of course, any users with read access to this ; file will be able to reveal the password as well. -; http://php.net/mysqli.default-pw +; https://php.net/mysqli.default-pw mysqli.default_pw = ; Allow or prevent reconnect @@ -1202,7 +1202,7 @@ mysqlnd.collect_memory_statistics = Off ; Records communication from all extensions using mysqlnd to the specified log ; file. -; http://php.net/mysqlnd.debug +; https://php.net/mysqlnd.debug ;mysqlnd.debug = ; Defines which queries will be logged. @@ -1229,25 +1229,25 @@ mysqlnd.collect_memory_statistics = Off ; Connection: Enables privileged connections using external ; credentials (OCI_SYSOPER, OCI_SYSDBA) -; http://php.net/oci8.privileged-connect +; https://php.net/oci8.privileged-connect ;oci8.privileged_connect = Off ; Connection: The maximum number of persistent OCI8 connections per ; process. Using -1 means no limit. -; http://php.net/oci8.max-persistent +; https://php.net/oci8.max-persistent ;oci8.max_persistent = -1 ; Connection: The maximum number of seconds a process is allowed to ; maintain an idle persistent connection. Using -1 means idle ; persistent connections will be maintained forever. -; http://php.net/oci8.persistent-timeout +; https://php.net/oci8.persistent-timeout ;oci8.persistent_timeout = -1 ; Connection: The number of seconds that must pass before issuing a ; ping during oci_pconnect() to check the connection validity. When ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables ; pings completely. -; http://php.net/oci8.ping-interval +; https://php.net/oci8.ping-interval ;oci8.ping_interval = 60 ; Connection: Set this to a user chosen connection class to be used @@ -1265,59 +1265,59 @@ mysqlnd.collect_memory_statistics = Off ; Tuning: This option enables statement caching, and specifies how ; many statements to cache. Using 0 disables statement caching. -; http://php.net/oci8.statement-cache-size +; https://php.net/oci8.statement-cache-size ;oci8.statement_cache_size = 20 ; Tuning: Enables statement prefetching and sets the default number of ; rows that will be fetched automatically after statement execution. -; http://php.net/oci8.default-prefetch +; https://php.net/oci8.default-prefetch ;oci8.default_prefetch = 100 ; Compatibility. Using On means oci_close() will not close ; oci_connect() and oci_new_connect() connections. -; http://php.net/oci8.old-oci-close-semantics +; https://php.net/oci8.old-oci-close-semantics ;oci8.old_oci_close_semantics = Off [PostgreSQL] ; Allow or prevent persistent links. -; http://php.net/pgsql.allow-persistent +; https://php.net/pgsql.allow-persistent pgsql.allow_persistent = On ; Detect broken persistent links always with pg_pconnect(). ; Auto reset feature requires a little overheads. -; http://php.net/pgsql.auto-reset-persistent +; https://php.net/pgsql.auto-reset-persistent pgsql.auto_reset_persistent = Off ; Maximum number of persistent links. -1 means no limit. -; http://php.net/pgsql.max-persistent +; https://php.net/pgsql.max-persistent pgsql.max_persistent = -1 ; Maximum number of links (persistent+non persistent). -1 means no limit. -; http://php.net/pgsql.max-links +; https://php.net/pgsql.max-links pgsql.max_links = -1 ; Ignore PostgreSQL backends Notice message or not. ; Notice message logging require a little overheads. -; http://php.net/pgsql.ignore-notice +; https://php.net/pgsql.ignore-notice pgsql.ignore_notice = 0 ; Log PostgreSQL backends Notice message or not. ; Unless pgsql.ignore_notice=0, module cannot log notice message. -; http://php.net/pgsql.log-notice +; https://php.net/pgsql.log-notice pgsql.log_notice = 0 [bcmath] ; Number of decimal digits for all bcmath functions. -; http://php.net/bcmath.scale +; https://php.net/bcmath.scale bcmath.scale = 0 [browscap] -; http://php.net/browscap +; https://php.net/browscap ;browscap = extra/browscap.ini [Session] ; Handler used to store/retrieve data. -; http://php.net/session.save-handler +; https://php.net/session.save-handler session.save_handler = files ; Argument passed to save_handler. In the case of files, this is the path @@ -1346,7 +1346,7 @@ session.save_handler = files ; ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the process's umask. -; http://php.net/session.save-path +; https://php.net/session.save-path ;session.save_path = "/tmp" ; Whether to use strict session mode. @@ -1359,42 +1359,42 @@ session.save_handler = files session.use_strict_mode = 0 ; Whether to use cookies. -; http://php.net/session.use-cookies +; https://php.net/session.use-cookies session.use_cookies = 1 -; http://php.net/session.cookie-secure +; https://php.net/session.cookie-secure ;session.cookie_secure = ; This option forces PHP to fetch and use a cookie for storing and maintaining ; the session id. We encourage this operation as it's very helpful in combating ; session hijacking when not specifying and managing your own session id. It is ; not the be-all and end-all of session hijacking defense, but it's a good start. -; http://php.net/session.use-only-cookies +; https://php.net/session.use-only-cookies session.use_only_cookies = 1 ; Name of the session (used as cookie name). -; http://php.net/session.name +; https://php.net/session.name session.name = PHPSESSID ; Initialize session on request startup. -; http://php.net/session.auto-start +; https://php.net/session.auto-start session.auto_start = 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. -; http://php.net/session.cookie-lifetime +; https://php.net/session.cookie-lifetime session.cookie_lifetime = 0 ; The path for which the cookie is valid. -; http://php.net/session.cookie-path +; https://php.net/session.cookie-path session.cookie_path = / ; The domain for which the cookie is valid. -; http://php.net/session.cookie-domain +; https://php.net/session.cookie-domain session.cookie_domain = ; Whether or not to add the httpOnly flag to the cookie, which makes it ; inaccessible to browser scripting languages such as JavaScript. -; http://php.net/session.cookie-httponly +; https://php.net/session.cookie-httponly session.cookie_httponly = ; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) @@ -1404,7 +1404,7 @@ session.cookie_httponly = session.cookie_samesite = ; Handler used to serialize data. php is the standard serializer of PHP. -; http://php.net/session.serialize-handler +; https://php.net/session.serialize-handler session.serialize_handler = php ; Defines the probability that the 'garbage collection' process is started on every @@ -1413,7 +1413,7 @@ session.serialize_handler = php ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 -; http://php.net/session.gc-probability +; https://php.net/session.gc-probability session.gc_probability = 1 ; Defines the probability that the 'garbage collection' process is started on every @@ -1423,12 +1423,12 @@ session.gc_probability = 1 ; Default Value: 100 ; Development Value: 1000 ; Production Value: 1000 -; http://php.net/session.gc-divisor +; https://php.net/session.gc-divisor session.gc_divisor = 1000 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. -; http://php.net/session.gc-maxlifetime +; https://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440 ; NOTE: If you are using the subdirectory option for storing session files @@ -1442,16 +1442,16 @@ session.gc_maxlifetime = 1440 ; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. -; http://php.net/session.referer-check +; https://php.net/session.referer-check session.referer_check = ; Set to {nocache,private,public,} to determine HTTP caching aspects ; or leave this empty to avoid sending anti-caching headers. -; http://php.net/session.cache-limiter +; https://php.net/session.cache-limiter session.cache_limiter = nocache ; Document expires after n minutes. -; http://php.net/session.cache-expire +; https://php.net/session.cache-expire session.cache_expire = 180 ; trans sid support is disabled by default. @@ -1463,13 +1463,13 @@ session.cache_expire = 180 ; in publicly accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. -; http://php.net/session.use-trans-sid +; https://php.net/session.use-trans-sid session.use_trans_sid = 0 ; Set session ID character length. This value could be between 22 to 256. ; Shorter length than default is supported only for compatibility reason. ; Users should use 32 or more chars. -; http://php.net/session.sid-length +; https://php.net/session.sid-length ; Default Value: 32 ; Development Value: 26 ; Production Value: 26 @@ -1484,7 +1484,7 @@ session.sid_length = 26 ; Default Value: "a=href,area=href,frame=src,form=" ; Development Value: "a=href,area=href,frame=src,form=" ; Production Value: "a=href,area=href,frame=src,form=" -; http://php.net/url-rewriter.tags +; https://php.net/url-rewriter.tags session.trans_sid_tags = "a=href,area=href,frame=src,form=" ; URL rewriter does not rewrite absolute URLs by default. @@ -1509,14 +1509,14 @@ session.trans_sid_tags = "a=href,area=href,frame=src,form=" ; Default Value: 4 ; Development Value: 5 ; Production Value: 5 -; http://php.net/session.hash-bits-per-character +; https://php.net/session.hash-bits-per-character session.sid_bits_per_character = 5 ; Enable upload progress tracking in $_SESSION ; Default Value: On ; Development Value: On ; Production Value: On -; http://php.net/session.upload-progress.enabled +; https://php.net/session.upload-progress.enabled ;session.upload_progress.enabled = On ; Cleanup the progress information as soon as all POST data has been read @@ -1524,14 +1524,14 @@ session.sid_bits_per_character = 5 ; Default Value: On ; Development Value: On ; Production Value: On -; http://php.net/session.upload-progress.cleanup +; https://php.net/session.upload-progress.cleanup ;session.upload_progress.cleanup = On ; A prefix used for the upload progress key in $_SESSION ; Default Value: "upload_progress_" ; Development Value: "upload_progress_" ; Production Value: "upload_progress_" -; http://php.net/session.upload-progress.prefix +; https://php.net/session.upload-progress.prefix ;session.upload_progress.prefix = "upload_progress_" ; The index name (concatenated with the prefix) in $_SESSION @@ -1539,7 +1539,7 @@ session.sid_bits_per_character = 5 ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" -; http://php.net/session.upload-progress.name +; https://php.net/session.upload-progress.name ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" ; How frequently the upload progress should be updated. @@ -1547,18 +1547,18 @@ session.sid_bits_per_character = 5 ; Default Value: "1%" ; Development Value: "1%" ; Production Value: "1%" -; http://php.net/session.upload-progress.freq +; https://php.net/session.upload-progress.freq ;session.upload_progress.freq = "1%" ; The minimum delay between updates, in seconds ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 -; http://php.net/session.upload-progress.min-freq +; https://php.net/session.upload-progress.min-freq ;session.upload_progress.min_freq = "1" ; Only write session data when session data is changed. Enabled by default. -; http://php.net/session.lazy-write +; https://php.net/session.lazy-write ;session.lazy_write = On [Assertion] @@ -1570,48 +1570,48 @@ session.sid_bits_per_character = 5 ; Default Value: 1 ; Development Value: 1 ; Production Value: -1 -; http://php.net/zend.assertions +; https://php.net/zend.assertions zend.assertions = -1 ; Assert(expr); active by default. -; http://php.net/assert.active +; https://php.net/assert.active ;assert.active = On ; Throw an AssertionError on failed assertions -; http://php.net/assert.exception +; https://php.net/assert.exception ;assert.exception = On ; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) -; http://php.net/assert.warning +; https://php.net/assert.warning ;assert.warning = On ; Don't bail out by default. -; http://php.net/assert.bail +; https://php.net/assert.bail ;assert.bail = Off ; User-function to be called if an assertion fails. -; http://php.net/assert.callback +; https://php.net/assert.callback ;assert.callback = 0 [COM] ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs -; http://php.net/com.typelib-file +; https://php.net/com.typelib-file ;com.typelib_file = ; allow Distributed-COM calls -; http://php.net/com.allow-dcom +; https://php.net/com.allow-dcom ;com.allow_dcom = true ; autoregister constants of a component's typlib on com_load() -; http://php.net/com.autoregister-typelib +; https://php.net/com.autoregister-typelib ;com.autoregister_typelib = true ; register constants casesensitive -; http://php.net/com.autoregister-casesensitive +; https://php.net/com.autoregister-casesensitive ;com.autoregister_casesensitive = false ; show warnings on duplicate constant registrations -; http://php.net/com.autoregister-verbose +; https://php.net/com.autoregister-verbose ;com.autoregister_verbose = true ; The default character set code-page to use when passing strings to and from COM objects. @@ -1625,7 +1625,7 @@ zend.assertions = -1 [mbstring] ; language for internal character representation. ; This affects mb_send_mail() and mbstring.detect_order. -; http://php.net/mbstring.language +; https://php.net/mbstring.language ;mbstring.language = Japanese ; Use of this INI entry is deprecated, use global internal_encoding instead. @@ -1640,7 +1640,7 @@ zend.assertions = -1 ; mbstring.encoding_translation = On is needed to use this setting. ; If empty, default_charset or input_encoding or mbstring.input is used. ; The precedence is: default_charset < input_encoding < mbstring.http_input -; http://php.net/mbstring.http-input +; https://php.net/mbstring.http-input ;mbstring.http_input = ; Use of this INI entry is deprecated, use global output_encoding instead. @@ -1650,7 +1650,7 @@ zend.assertions = -1 ; The precedence is: default_charset < output_encoding < mbstring.http_output ; To use an output encoding conversion, mbstring's output handler must be set ; otherwise output encoding conversion cannot be performed. -; http://php.net/mbstring.http-output +; https://php.net/mbstring.http-output ;mbstring.http_output = ; enable automatic encoding translation according to @@ -1658,17 +1658,17 @@ zend.assertions = -1 ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. -; http://php.net/mbstring.encoding-translation +; https://php.net/mbstring.encoding-translation ;mbstring.encoding_translation = Off ; automatic encoding detection order. ; "auto" detect order is changed according to mbstring.language -; http://php.net/mbstring.detect-order +; https://php.net/mbstring.detect-order ;mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another -; http://php.net/mbstring.substitute-character +; https://php.net/mbstring.substitute-character ;mbstring.substitute_character = none ; Enable strict encoding detection. @@ -1691,7 +1691,7 @@ zend.assertions = -1 ; Tell the jpeg decode to ignore warnings and try to create ; a gd image. The warning will then be displayed as notices ; disabled by default -; http://php.net/gd.jpeg-ignore-warning +; https://php.net/gd.jpeg-ignore-warning ;gd.jpeg_ignore_warning = 1 [exif] @@ -1700,47 +1700,47 @@ zend.assertions = -1 ; given by corresponding encode setting. When empty mbstring.internal_encoding ; is used. For the decode settings you can distinguish between motorola and ; intel byte order. A decode setting cannot be empty. -; http://php.net/exif.encode-unicode +; https://php.net/exif.encode-unicode ;exif.encode_unicode = ISO-8859-15 -; http://php.net/exif.decode-unicode-motorola +; https://php.net/exif.decode-unicode-motorola ;exif.decode_unicode_motorola = UCS-2BE -; http://php.net/exif.decode-unicode-intel +; https://php.net/exif.decode-unicode-intel ;exif.decode_unicode_intel = UCS-2LE -; http://php.net/exif.encode-jis +; https://php.net/exif.encode-jis ;exif.encode_jis = -; http://php.net/exif.decode-jis-motorola +; https://php.net/exif.decode-jis-motorola ;exif.decode_jis_motorola = JIS -; http://php.net/exif.decode-jis-intel +; https://php.net/exif.decode-jis-intel ;exif.decode_jis_intel = JIS [Tidy] ; The path to a default tidy configuration file to use when using tidy -; http://php.net/tidy.default-config +; https://php.net/tidy.default-config ;tidy.default_config = /usr/local/lib/php/default.tcfg ; Should tidy clean and repair output automatically? ; WARNING: Do not use this option if you are generating non-html content ; such as dynamic images -; http://php.net/tidy.clean-output +; https://php.net/tidy.clean-output tidy.clean_output = Off [soap] ; Enables or disables WSDL caching feature. -; http://php.net/soap.wsdl-cache-enabled +; https://php.net/soap.wsdl-cache-enabled soap.wsdl_cache_enabled=1 ; Sets the directory name where SOAP extension will put cache files. -; http://php.net/soap.wsdl-cache-dir +; https://php.net/soap.wsdl-cache-dir soap.wsdl_cache_dir="/tmp" ; (time to live) Sets the number of second while cached file will be used ; instead of original one. -; http://php.net/soap.wsdl-cache-ttl +; https://php.net/soap.wsdl-cache-ttl soap.wsdl_cache_ttl=86400 ; Sets the size of the cache limit. (Max. number of WSDL files to cache) @@ -1895,12 +1895,12 @@ ldap.max_links = -1 ; Specifies a PHP script that is going to be compiled and executed at server ; start-up. -; http://php.net/opcache.preload +; https://php.net/opcache.preload ;opcache.preload= ; Preloading code as root is not allowed for security reasons. This directive ; facilitates to let the preloading to be run as another user. -; http://php.net/opcache.preload_user +; https://php.net/opcache.preload_user ;opcache.preload_user= ; Prevents caching files that are less than this number of seconds old. It diff --git a/run-tests.php b/run-tests.php index 00881cf779..7cb8fed1be 100755 --- a/run-tests.php +++ b/run-tests.php @@ -121,6 +121,10 @@ Options: --color --no-color Do/Don't colorize the result type in the test result. + --repeat [n] + Run the tests multiple times in the same process and check the + output of the last execution (CLI SAPI only). + HELP; } @@ -147,7 +151,7 @@ function main(): void $repeat, $result_tests_file, $slow_min_ms, $start_time, $switch, $temp_source, $temp_target, $test_cnt, $test_dirs, $test_files, $test_idx, $test_list, $test_results, $testfile, - $user_tests, $valgrind, $sum_results, $shuffle, $file_cache; + $user_tests, $valgrind, $sum_results, $shuffle, $file_cache, $num_repeats; // Parallel testing global $workers, $workerID; global $context_line_count; @@ -405,6 +409,7 @@ function main(): void $shuffle = false; $workers = null; $context_line_count = 3; + $num_repeats = 1; $cfgtypes = ['show', 'keep']; $cfgfiles = ['skip', 'php', 'clean', 'out', 'diff', 'exp', 'mem']; @@ -623,6 +628,10 @@ function main(): void . ':print_suppressions=0'; } break; + case '--repeat': + $num_repeats = (int) $argv[++$i]; + $environment['SKIP_REPEAT'] = 1; + break; //case 'w' case '-': // repeat check with full switch @@ -1802,6 +1811,13 @@ function show_file_block(string $file, string $block, ?string $section = null): } } +function skip_test(string $tested, string $tested_file, string $shortname, string $reason) { + show_result('SKIP', $tested, $tested_file, "reason: $reason"); + junit_init_suite(junit_get_suitename_for($shortname)); + junit_mark_test_as('SKIP', $shortname, $tested, 0, $reason); + return 'SKIPPED'; +} + // // Run an individual test case. // @@ -1818,6 +1834,7 @@ function run_test(string $php, $file, array $env): string global $no_file_cache; global $slow_min_ms; global $preload, $file_cache; + global $num_repeats; // Parallel testing global $workerID; $temp_filenames = null; @@ -1911,6 +1928,10 @@ TEST $file } } + $shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file); + $tested_file = $shortname; + $tested = trim($section_text['TEST']); + // the redirect section allows a set of tests to be reused outside of // a given test dir if ($bork_info === null) { @@ -1928,6 +1949,10 @@ TEST $file unset($section_text['FILEEOF']); } + if ($num_repeats > 1 && isset($section_text['FILE_EXTERNAL'])) { + return skip_test($tested, $tested_file, $shortname, 'Test with FILE_EXTERNAL might not be repeatable'); + } + foreach (['FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX'] as $prefix) { $key = $prefix . '_EXTERNAL'; @@ -1951,9 +1976,6 @@ TEST $file } fclose($fp); - $shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file); - $tested_file = $shortname; - if ($bork_info !== null) { show_result("BORK", $bork_info, $tested_file); $PHP_FAILED_TESTS['BORKED'][] = [ @@ -1983,8 +2005,6 @@ TEST $file $cmdRedirect = ''; } - $tested = trim($section_text['TEST']); - /* For GET/POST/PUT tests, check if cgi sapi is available and if it is, use it. */ if (array_key_exists('CGI', $section_text) || !empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['GZIP_POST']) || !empty($section_text['DEFLATE_POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['PUT']) || !empty($section_text['COOKIE']) || !empty($section_text['EXPECTHEADERS'])) { if (isset($php_cgi)) { @@ -1999,13 +2019,12 @@ TEST $file } elseif (file_exists(dirname($php) . "/php-cgi")) { $php = realpath(dirname($php) . "/php-cgi") . ' -C '; } else { - show_result('SKIP', $tested, $tested_file, "reason: CGI not available"); - - junit_init_suite(junit_get_suitename_for($shortname)); - junit_mark_test_as('SKIP', $shortname, $tested, 0, 'CGI not available'); - return 'SKIPPED'; + return skip_test($tested, $tested_file, $shortname, 'CGI not available'); } } + if ($num_repeats > 1) { + return skip_test($tested, $tested_file, $shortname, 'CGI does not support --repeat'); + } $uses_cgi = true; } @@ -2023,11 +2042,22 @@ TEST $file // be run straight away. For example, EXTENSIONS, SKIPIF, CLEAN. $extra_options = '-rr'; } else { - show_result('SKIP', $tested, $tested_file, "reason: phpdbg not available"); + return skip_test($tested, $tested_file, $shortname, 'phpdbg not available'); + } + if ($num_repeats > 1) { + return skip_test($tested, $tested_file, $shortname, 'phpdbg does not support --repeat'); + } + } - junit_init_suite(junit_get_suitename_for($shortname)); - junit_mark_test_as('SKIP', $shortname, $tested, 0, 'phpdbg not available'); - return 'SKIPPED'; + if ($num_repeats > 1) { + if (array_key_exists('CLEAN', $section_text)) { + return skip_test($tested, $tested_file, $shortname, 'Test with CLEAN might not be repeatable'); + } + if (array_key_exists('STDIN', $section_text)) { + return skip_test($tested, $tested_file, $shortname, 'Test with STDIN might not be repeatable'); + } + if (array_key_exists('CAPTURE_STDIO', $section_text)) { + return skip_test($tested, $tested_file, $shortname, 'Test with CAPTURE_STDIO might not be repeatable'); } } @@ -2173,6 +2203,9 @@ TEST $file // even though all the files are re-created. $ini_settings['opcache.validate_timestamps'] = '0'; } + } else if ($num_repeats > 1) { + // Make sure warnings still show up on the second run. + $ini_settings['opcache.record_warnings'] = '1'; } // Any special ini settings @@ -2183,6 +2216,10 @@ TEST $file $replacement = IS_WINDOWS ? '"' . PHP_BINARY . ' -r \"while ($in = fgets(STDIN)) echo $in;\" > $1"' : 'tee $1 >/dev/null'; $section_text['INI'] = preg_replace('/{MAIL:(\S+)}/', $replacement, $section_text['INI']); settings2array(preg_split("/[\n\r]+/", $section_text['INI']), $ini_settings); + + if ($num_repeats > 1 && isset($ini_settings['opcache.opt_debug_level'])) { + return skip_test($tested, $tested_file, $shortname, 'opt_debug_level tests are not repeatable'); + } } $ini_settings = settings2params($ini_settings); @@ -2484,7 +2521,8 @@ TEST $file $env['CONTENT_TYPE'] = ''; $env['CONTENT_LENGTH'] = ''; - $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args$cmdRedirect"; + $repeat_option = $num_repeats > 1 ? "--repeat $num_repeats" : ""; + $cmd = "$php $pass_options $repeat_option $ini_settings -f \"$test_file\" $args$cmdRedirect"; } if ($valgrind) { @@ -2557,6 +2595,25 @@ COMMAND $cmd } } + if ($num_repeats > 1) { + // In repeat mode, retain the output before the first execution, + // and of the last execution. Do this early, because the trimming below + // makes the newline handling complicated. + $separator1 = "Executing for the first time...\n"; + $separator1_pos = strpos($out, $separator1); + if ($separator1_pos !== false) { + $separator2 = "Finished execution, repeating...\n"; + $separator2_pos = strrpos($out, $separator2); + if ($separator2_pos !== false) { + $out = substr($out, 0, $separator1_pos) + . substr($out, $separator2_pos + strlen($separator2)); + } else { + $out = substr($out, 0, $separator1_pos) + . substr($out, $separator1_pos + strlen($separator1)); + } + } + } + // Does the output match what is expected? $output = preg_replace("/\r\n/", "\n", trim($out)); diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index d28f5a5378..5092fb0ffd 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -172,6 +172,9 @@ const opt_struct OPTIONS[] = { {14, 1, "ri"}, {14, 1, "rextinfo"}, {15, 0, "ini"}, + /* Internal testing option -- may be changed or removed without notice, + * including in patch releases. */ + {16, 1, "repeat"}, {'-', 0, NULL} /* end of args */ }; @@ -529,7 +532,7 @@ static void php_cli_usage(char *argv0) static php_stream *s_in_process = NULL; -static void cli_register_file_handles(void) /* {{{ */ +static void cli_register_file_handles(zend_bool no_close) /* {{{ */ { php_stream *s_in, *s_out, *s_err; php_stream_context *sc_in=NULL, *sc_out=NULL, *sc_err=NULL; @@ -546,11 +549,11 @@ static void cli_register_file_handles(void) /* {{{ */ return; } -#if PHP_DEBUG - /* do not close stdout and stderr */ - s_out->flags |= PHP_STREAM_FLAG_NO_CLOSE; - s_err->flags |= PHP_STREAM_FLAG_NO_CLOSE; -#endif + if (no_close) { + s_in->flags |= PHP_STREAM_FLAG_NO_CLOSE; + s_out->flags |= PHP_STREAM_FLAG_NO_CLOSE; + s_err->flags |= PHP_STREAM_FLAG_NO_CLOSE; + } s_in_process = s_in; @@ -614,6 +617,8 @@ static int do_cli(int argc, char **argv) /* {{{ */ int interactive=0; const char *param_error=NULL; int hide_argv = 0; + int num_repeats = 1; + pid_t pid = getpid(); zend_try { @@ -839,6 +844,9 @@ static int do_cli(int argc, char **argv) /* {{{ */ case 15: behavior = PHP_MODE_SHOW_INI_CONFIG; break; + case 16: + num_repeats = atoi(php_optarg); + break; default: break; } @@ -873,6 +881,12 @@ static int do_cli(int argc, char **argv) /* {{{ */ fflush(stdout); } + if (num_repeats > 1) { + fprintf(stdout, "Executing for the first time...\n"); + fflush(stdout); + } + +do_repeat: /* only set script_file if not set already and not in direct mode and not at end of parameter list */ if (argc > php_optind && !script_file @@ -940,7 +954,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ switch (behavior) { case PHP_MODE_STANDARD: if (strcmp(file_handle.filename, "Standard input code")) { - cli_register_file_handles(); + cli_register_file_handles(/* no_close */ PHP_DEBUG || num_repeats > 1); } if (interactive && cli_shell_callbacks.cli_shell_run) { @@ -975,7 +989,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ } break; case PHP_MODE_CLI_DIRECT: - cli_register_file_handles(); + cli_register_file_handles(/* no_close */ PHP_DEBUG || num_repeats > 1); zend_eval_string_ex(exec_direct, NULL, "Command line code", 1); break; @@ -985,7 +999,7 @@ static int do_cli(int argc, char **argv) /* {{{ */ size_t len, index = 0; zval argn, argi; - cli_register_file_handles(); + cli_register_file_handles(/* no_close */ PHP_DEBUG || num_repeats > 1); if (exec_begin) { zend_eval_string_ex(exec_begin, NULL, "Command line begin code", 1); @@ -1112,6 +1126,12 @@ out: if (translated_path) { free(translated_path); } + /* Don't repeat fork()ed processes. */ + if (--num_repeats && pid == getpid()) { + fprintf(stdout, "Finished execution, repeating...\n"); + fflush(stdout); + goto do_repeat; + } return EG(exit_status); err: sapi_deactivate(); diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index a32b51e3d3..636e1de122 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -1879,12 +1879,8 @@ static size_t php_cli_server_client_send_through(php_cli_server_client *client, int nfds = php_pollfd_for(client->sock, POLLOUT, &tv); if (nfds > 0) { continue; - } else if (nfds < 0) { - /* error */ - php_handle_aborted_connection(); - return nbytes_left; } else { - /* timeout */ + /* error or timeout */ php_handle_aborted_connection(); return nbytes_left; } diff --git a/sapi/cli/tests/CONFLICTS b/sapi/cli/tests/CONFLICTS deleted file mode 100644 index 254defddb5..0000000000 --- a/sapi/cli/tests/CONFLICTS +++ /dev/null @@ -1 +0,0 @@ -server diff --git a/sapi/cli/tests/bug61977.phpt b/sapi/cli/tests/bug61977.phpt index b55c6a2e8f..e804e0dfce 100644 --- a/sapi/cli/tests/bug61977.phpt +++ b/sapi/cli/tests/bug61977.phpt @@ -7,7 +7,7 @@ include "skipif.inc"; --FILE-- <?php include "php_cli_server.inc"; -php_cli_server_start('<?php ?>', null); +$doc_root = php_cli_server_start('<?php ?>', null)->docRoot; /* * If a Mime Type is added in php_cli_server.c, add it to this array and update @@ -15,32 +15,29 @@ php_cli_server_start('<?php ?>', null); */ $mimetypes = ['html', 'htm', 'svg', 'css', 'js', 'png', 'webm', 'ogv', 'ogg']; -function test_mimetypes($mimetypes) { - foreach ($mimetypes as $mimetype) { - $host = PHP_CLI_SERVER_HOSTNAME; - $fp = php_cli_server_connect(); - if (!$fp) die('Connect failed'); - file_put_contents(__DIR__ . "/foo.{$mimetype}", ''); - $header = <<<HEADER +foreach ($mimetypes as $mimetype) { + $host = PHP_CLI_SERVER_HOSTNAME; + $fp = php_cli_server_connect(); + if (!$fp) die('Connect failed'); + file_put_contents($doc_root . "/foo.{$mimetype}", ''); + $header = <<<HEADER GET /foo.{$mimetype} HTTP/1.1 Host: {$host} HEADER; - if (fwrite($fp, $header)) { - while (!feof($fp)) { - $text = fgets($fp); - if (strncasecmp("Content-type:", $text, 13) == 0) { - echo "foo.{$mimetype} => ", $text; - } + if (fwrite($fp, $header)) { + while (!feof($fp)) { + $text = fgets($fp); + if (strncasecmp("Content-type:", $text, 13) == 0) { + echo "foo.{$mimetype} => ", $text; } - @unlink(__DIR__ . "/foo.{$mimetype}"); - fclose($fp); } + @unlink($doc_root . "/foo.{$mimetype}"); + fclose($fp); } } -test_mimetypes($mimetypes); ?> --EXPECT-- foo.html => Content-Type: text/html; charset=UTF-8 diff --git a/sapi/cli/tests/bug67429_1.phpt b/sapi/cli/tests/bug67429_1.phpt index 5b23818bdb..5519463340 100644 --- a/sapi/cli/tests/bug67429_1.phpt +++ b/sapi/cli/tests/bug67429_1.phpt @@ -8,7 +8,7 @@ include "skipif.inc"; <?php include "php_cli_server.inc"; -$proc_handle = php_cli_server_start(<<<PHP +php_cli_server_start(<<<PHP http_response_code(308); PHP ); diff --git a/sapi/cli/tests/bug67429_2.phpt b/sapi/cli/tests/bug67429_2.phpt index 381c7af8e5..5c4fffe410 100644 --- a/sapi/cli/tests/bug67429_2.phpt +++ b/sapi/cli/tests/bug67429_2.phpt @@ -8,7 +8,7 @@ include "skipif.inc"; <?php include "php_cli_server.inc"; -$proc_handle = php_cli_server_start(<<<PHP +php_cli_server_start(<<<PHP http_response_code(426); PHP ); diff --git a/sapi/cli/tests/bug68291.phpt b/sapi/cli/tests/bug68291.phpt index 62042307c5..1082194f5f 100644 --- a/sapi/cli/tests/bug68291.phpt +++ b/sapi/cli/tests/bug68291.phpt @@ -9,13 +9,10 @@ include "skipif.inc"; --FILE-- <?php include "php_cli_server.inc"; -file_put_contents(__DIR__ . '/bug68291+test.html', 'Found'); -php_cli_server_start(NULL, NULL); +$docRoot = php_cli_server_start(NULL, NULL)->docRoot; +file_put_contents($docRoot . '/bug68291+test.html', 'Found'); echo file_get_contents('http://' . PHP_CLI_SERVER_ADDRESS . '/bug68291+test.html'); -?> ---CLEAN-- -<?php -@unlink(__DIR__ . '/bug68291+test.html'); +@unlink($docRoot . '/bug68291+test.html'); ?> --EXPECT-- Found diff --git a/sapi/cli/tests/bug69655.phpt b/sapi/cli/tests/bug69655.phpt index b5612357f9..4ab53bcbaa 100644 --- a/sapi/cli/tests/bug69655.phpt +++ b/sapi/cli/tests/bug69655.phpt @@ -17,11 +17,11 @@ foreach (['MKCO', 'MKCOLL', 'M'] as $method) { } ?> --EXPECTF-- -Warning: file_get_contents(http://localhost:8964): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented +Warning: file_get_contents(http://localhost:%d): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented in %s on line %d -Warning: file_get_contents(http://localhost:8964): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented +Warning: file_get_contents(http://localhost:%d): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented in %s on line %d -Warning: file_get_contents(http://localhost:8964): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented +Warning: file_get_contents(http://localhost:%d): Failed to open stream: HTTP request failed! HTTP/1.1 501 Not Implemented in %s on line %d diff --git a/sapi/cli/tests/php_cli_server.inc b/sapi/cli/tests/php_cli_server.inc index 4cf8705a33..26bdd4c18f 100644 --- a/sapi/cli/tests/php_cli_server.inc +++ b/sapi/cli/tests/php_cli_server.inc @@ -1,22 +1,29 @@ <?php -define("PHP_CLI_SERVER_HOSTNAME", "localhost"); -define("PHP_CLI_SERVER_PORT", 8964); -define("PHP_CLI_SERVER_ADDRESS", PHP_CLI_SERVER_HOSTNAME.":".PHP_CLI_SERVER_PORT); + +// TODO: Move address/port info in here? +class CliServerInfo { + public function __construct( + public string $docRoot, + ) {} +} function php_cli_server_start( ?string $code = 'echo "Hello world";', ?string $router = 'index.php', array $cmd_args = [] -) { +): CliServerInfo { $php_executable = getenv('TEST_PHP_EXECUTABLE'); - $doc_root = __DIR__; $error = null; + // Create dedicated doc root to avoid index.php clashes between tests. + $doc_root = __DIR__ . '/' . basename($_SERVER['PHP_SELF'], '.php'); + @mkdir($doc_root); + if ($code) { file_put_contents($doc_root . '/' . ($router ?: 'index.php'), '<?php ' . $code . ' ?>'); } - $cmd = [$php_executable, '-t', $doc_root, '-n', ...$cmd_args, '-S', PHP_CLI_SERVER_ADDRESS]; + $cmd = [$php_executable, '-t', $doc_root, '-n', ...$cmd_args, '-S', 'localhost:0']; if (!is_null($router)) { $cmd[] = $router; } @@ -24,62 +31,58 @@ function php_cli_server_start( $descriptorspec = array( 0 => STDIN, 1 => STDOUT, - 2 => array("null"), + 2 => ['pipe', 'w'], ); $handle = proc_open($cmd, $descriptorspec, $pipes, $doc_root, null, array("suppress_errors" => true)); - // note: here we check the process is running - for ($i=0; $i < 120; $i++) { + // First, wait for the dev server to declare itself ready. + $bound = null; + stream_set_blocking($pipes[2], false); + for ($i = 0; $i < 60; $i++) { + usleep(50000); // 50ms per try $status = proc_get_status($handle); + if (empty($status['running'])) { + echo "Server is not running\n"; + proc_terminate($handle); + exit(1); + } - if (!$status || !$status['running']) { - if ($status && - ($status['running'] == false && $status['exitcode'] != 0)) { - $error = - "Server could not be started\n"; - break; + while (($line = fgets($pipes[2])) !== false) { + if (preg_match('@PHP \S* Development Server \(https?://(.*?:\d+)\) started@', $line, $matches)) { + $bound = $matches[1]; + // Now that we've identified the listen address, close STDERR. + // Otherwise the pipe may clog up with unread log messages. + fclose($pipes[2]); + break 2; } - - usleep(50000); // 50ms per try - continue; } + } + if ($bound === null) { + echo "Server did not output startup message"; + proc_terminate($handle); + exit(1); + } - if ($status['signaled']) { - $error = - "Server was terminated with {$status['termsig']}\n"; + // Now wait for a connection to succeed. + // note: even when server prints 'Listening on localhost:8964...Press Ctrl-C to quit.' + // it might not be listening yet...need to wait until fsockopen() call returns + $error = "Unable to connect to server\n"; + for ($i=0; $i < 60; $i++) { + usleep(50000); // 50ms per try + $status = proc_get_status($handle); + $fp = @fsockopen("tcp://$bound"); + // Failure, the server is no longer running + if (!($status && $status['running'])) { + $error = "Server is not running\n"; break; } - - if ($status['stopped']) { - $error = - "Server was stopped with {$status['stopsig']}\n"; + // Success, Connected to servers + if ($fp) { + $error = ''; break; } - - // note: here we check the server is listening, even when the server prints - // listening on %s:%d - // it may not be ready to accept connections - $start = time(); - - for ($try = 0; $try < 120; $try++) { - $error = @fsockopen( - PHP_CLI_SERVER_HOSTNAME, PHP_CLI_SERVER_PORT) ? - null : - sprintf( - "Server is not accepting connections after %d seconds\n", - time() - $start); - - if (!$error) { - break 2; - } - - usleep(50000); - } - - break; } -php_cli_server_start_error: if ($error) { echo $error; proc_terminate($handle); @@ -87,14 +90,21 @@ php_cli_server_start_error: } register_shutdown_function( - function($handle) use($router) { + function($handle) use($router, $doc_root) { proc_terminate($handle); @unlink(__DIR__ . "/{$router}"); + @rmdir($doc_root); }, $handle ); - return $handle; + // Define the same "constants" we previously did. + $port = (int) substr($bound, strrpos($bound, ':') + 1); + define("PHP_CLI_SERVER_HOSTNAME", "localhost"); + define("PHP_CLI_SERVER_PORT", $port); + define("PHP_CLI_SERVER_ADDRESS", PHP_CLI_SERVER_HOSTNAME.":".PHP_CLI_SERVER_PORT); + + return new CliServerInfo($doc_root); } function php_cli_server_connect() { diff --git a/sapi/cli/tests/php_cli_server_002.phpt b/sapi/cli/tests/php_cli_server_002.phpt index e1fbd90398..2daf6aad73 100644 --- a/sapi/cli/tests/php_cli_server_002.phpt +++ b/sapi/cli/tests/php_cli_server_002.phpt @@ -13,8 +13,8 @@ php_cli_server_start('var_dump($_SERVER["DOCUMENT_ROOT"], $_SERVER["SERVER_SOFTW var_dump(file_get_contents("http://" . PHP_CLI_SERVER_ADDRESS)); ?> --EXPECTF-- -string(%d) "string(%d) "%stests" +string(%d) "string(%d) "%sphp_cli_server_002" string(%d) "PHP %s Development Server" string(%d) "localhost" -string(%d) "8964" +string(%d) "%s" " diff --git a/sapi/cli/tests/php_cli_server_012.phpt b/sapi/cli/tests/php_cli_server_012.phpt index 6262aa2c73..9824c63c40 100644 --- a/sapi/cli/tests/php_cli_server_012.phpt +++ b/sapi/cli/tests/php_cli_server_012.phpt @@ -7,8 +7,8 @@ include "skipif.inc"; --FILE-- <?php include "php_cli_server.inc"; -php_cli_server_start('print_r($_REQUEST); $_REQUEST["foo"] = "bar"; return FALSE;'); -$doc_root = __DIR__; +$info = php_cli_server_start('print_r($_REQUEST); $_REQUEST["foo"] = "bar"; return FALSE;'); +$doc_root = $info->docRoot; file_put_contents($doc_root . '/request.php', '<?php print_r($_REQUEST); ?>'); $host = PHP_CLI_SERVER_HOSTNAME; diff --git a/sapi/cli/tests/php_cli_server_015.phpt b/sapi/cli/tests/php_cli_server_015.phpt index af48758306..5821fdbbc2 100644 --- a/sapi/cli/tests/php_cli_server_015.phpt +++ b/sapi/cli/tests/php_cli_server_015.phpt @@ -9,10 +9,9 @@ display_errors=1 --FILE-- <?php include "php_cli_server.inc"; -php_cli_server_start('require("syntax_error.php");'); -$dir = realpath(__DIR__); +$doc_root = php_cli_server_start('require("syntax_error.php");')->docRoot; -file_put_contents($dir . "/syntax_error.php", "<?php non_exists_function(); ?>"); +file_put_contents($doc_root . "/syntax_error.php", "<?php non_exists_function(); ?>"); $output = ''; $host = PHP_CLI_SERVER_HOSTNAME; @@ -30,7 +29,7 @@ HEADER } } echo $output; -@unlink($dir . "/syntax_error.php"); +@unlink($doc_root . "/syntax_error.php"); fclose($fp); ?> --EXPECTF-- diff --git a/sapi/fpm/fpm/fpm_stdio.c b/sapi/fpm/fpm/fpm_stdio.c index 1742467b36..42ea159430 100644 --- a/sapi/fpm/fpm/fpm_stdio.c +++ b/sapi/fpm/fpm/fpm_stdio.c @@ -10,6 +10,7 @@ #include <errno.h> #include "php_syslog.h" +#include "php_network.h" #include "fpm.h" #include "fpm_children.h" @@ -166,7 +167,7 @@ static void fpm_stdio_child_said(struct fpm_event_s *ev, short which, void *arg) stdio_read: in_buf = read(fd, buf, max_buf_size - 1); if (in_buf <= 0) { /* no data */ - if (in_buf == 0 || (errno != EAGAIN && errno != EWOULDBLOCK)) { + if (in_buf == 0 || !PHP_IS_TRANSIENT_ERROR(errno)) { /* pipe is closed or error */ read_fail = (in_buf < 0) ? in_buf : 1; } diff --git a/tests/basic/bug67198.phpt b/tests/basic/bug67198.phpt index e5ffe3bf6c..c89dfd49da 100644 --- a/tests/basic/bug67198.phpt +++ b/tests/basic/bug67198.phpt @@ -2,8 +2,6 @@ php://input is empty when enable_post_data_reading=Off --INI-- allow_url_fopen=1 ---CONFLICTS-- -server --SKIPIF-- <?php include __DIR__."/../../sapi/cli/tests/skipif.inc"; diff --git a/win32/build/confutils.js b/win32/build/confutils.js index bf88cdae44..31314ffd95 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -95,10 +95,10 @@ if (typeof(CWD) == "undefined") { if (!MODE_PHPIZE) { /* defaults; we pick up the precise versions from configure.ac */ var PHP_VERSION = 8; - var PHP_MINOR_VERSION = 0; + var PHP_MINOR_VERSION = 1; var PHP_RELEASE_VERSION = 0; var PHP_EXTRA_VERSION = ""; - var PHP_VERSION_STRING = "8.0.0"; + var PHP_VERSION_STRING = "8.1.0"; } /* Get version numbers and DEFINE as a string */ @@ -1544,7 +1544,6 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir) var _tmp = FSO.CreateTextFile(PHP_DIR + "/include/main/config.pickle.h", true); _tmp.Close(); } - cflags = "/FI main/config.pickle.h " + cflags; } ADD_FLAG("CFLAGS_" + EXT, cflags); @@ -2209,7 +2208,7 @@ function generate_config_pickle_h() var ln = outfile.ReadLine(); for (var i in keys) { - var reg = new RegExp("#define[\s ]+" + keys[i] + "[\s ]*.*", "g"); + var reg = new RegExp("#define[\s ]+" + keys[i] + "[\s ]*.*|#undef[\s ]+" + keys[i], "g"); if (ln.match(reg)) { found = true; @@ -2235,6 +2234,7 @@ function generate_config_pickle_h() continue; }*/ + lines.push("#undef " + keys[i]); lines.push("#define " + keys[i] + " " + item[0]); } @@ -2311,6 +2311,11 @@ function generate_config_h() outfile.WriteLine("#define " + keys[i] + " " + pieces); } + outfile.WriteBlankLines(1); + outfile.WriteLine("#if __has_include(\"main/config.pickle.h\")"); + outfile.WriteLine("#include \"main/config.pickle.h\""); + outfile.WriteLine("#endif"); + outfile.Close(); } |